// 递归遍历某一路径下的所有文件
//
//在windows下,可以使用FindFirstFile和FindNextFile来实现。
//
//而在Linux下,则可以使用opendir和readdir来实现。
//
//具体实现见下面两个函数,分别实现了打印某一路径下的所有文件,包括子目录下的文件。在具体实现的时候需要注意设置路径。
//
//注:
//
//下面两个程序都通过编译通过,且正常执行。
//windows下使用VC6.0编译;
//Linux下使用gcc 3.4.3编译。
//for windows
void findAllFile(char * pFilePath){
WIN32_FIND_DATA FindFileData;
HANDLE hFind = INVALID_HANDLE_VALUE;
char DirSpec[MAX_PATH + 1]; // directory specification
DWORD dwError;
strncpy (DirSpec, pFilePath, strlen(pFilePath) + 1);
SetCurrentDirectory(pFilePath);
strncat (DirSpec, "\\*", 3);
hFind = FindFirstFile(DirSpec, &FindFileData);
if (hFind == INVALID_HANDLE_VALUE){
printf ("Invalid file handle. Error is %u\n", GetLastError());
return ;
}
else{
if (FindFileData.dwFileAttributes != FILE_ATTRIBUTE_DIRECTORY ){
printf (" %s\n", FindFileData.cFileName);
}
else if(FindFileData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY&& strcmp(FindFileData.cFileName, ".") != 0&& strcmp(FindFileData.cFileName, "..") != 0){
char Dir[MAX_PATH + 1];
strcpy(Dir, pFilePath);
strncat(Dir, "\\", 2);
strcat(Dir, FindFileData.cFileName);
findAllFile(Dir);
}
while (FindNextFile(hFind, &FindFileData) != 0){
if (FindFileData.dwFileAttributes != FILE_ATTRIBUTE_DIRECTORY){
printf (" %s\n", FindFileData.cFileName);
}
else if(FindFileData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY&& strcmp(FindFileData.cFileName, ".") != 0&& strcmp(FindFileData.cFileName, "..") != 0){
char Dir[MAX_PATH + 1];
strcpy(Dir, pFilePath);
strncat(Dir, "\\", 2);
strcat(Dir, FindFileData.cFileName);
findAllFile(Dir);
}
}
dwError = GetLastError();
FindClose(hFind);
if (dwError != ERROR_NO_MORE_FILES) {
printf ("FindNextFile error. Error is %u\n", dwError);
return;
}
}
}
//for linux
void findAllFile(char * pFilePath){
DIR * dir;
dirent * ptr;
struct stat stStatBuf;
chdir(pFilePath);
dir = opendir(pFilePath);
while ((ptr = readdir(dir)) != NULL){
if (stat(ptr->d_name, &stStatBuf) == -1){
printf("Get the stat error on file:%s\n", ptr->d_name);
continue;
}
if ((stStatBuf.st_mode & S_IFDIR) && strcmp(ptr->d_name, ".") != 0&& strcmp(ptr->d_name, "..") != 0){
char Path[MAX_PATH];
strcpy(Path, pFilePath);
strncat(Path, "/", 1);
strcat(Path, ptr->d_name);
findAllFile(Path);
}
if (stStatBuf.st_mode & S_IFREG){
printf(" %s\n", ptr->d_name);
}
//this must change the directory , for maybe changed in the recured function
chdir(pFilePath);
}
closedir(dir);
}
分享到:
相关推荐
在C语言中,遍历文件夹目录中的文件和文件夹是一项常见的任务,这涉及到操作系统级别的文件系统操作。本文将深入探讨如何使用C语言实现这一功能,主要包括以下几个知识点: 1. **目录结构与文件路径**: 在计算机...
在C语言中,遍历一个目录下...总结,C语言遍历文件下指定后缀文件(包括子文件夹)主要涉及文件系统操作函数的使用、文件后缀的判断以及递归调用的实现。通过这些基础知识,我们可以灵活地处理各种文件系统相关的任务。
### C语言遍历文件夹里所有文件的知识点 #### 一、引言 在计算机编程领域,特别是操作系统相关的开发工作中,经常会遇到需要遍历文件夹内所有文件的需求。本篇文章将详细解析一个C语言实现的文件夹遍历程序,帮助...
这段代码首先调用`目录列表`获取目录`C:\MyDirectory\`中的所有文件和子目录,然后通过循环遍历得到的列表,逐个获取并打印文件信息。`文件信息`函数的第三个参数`.T.`表示我们只关心文件名,最后一个参数`.F.`表示...
c c++ c语言遍历文件夹 c语言读文件 c语言写文件 高效算法
Linux下遍历目录搜索文件源程序以及执行文件,支持嵌套目录,输出目录、子目录和对应的子目录中的文件列表,以及总文件数目。 LINUX下历遍目录的方法一般是这样的:打开目录-》读取-》关闭目录 相关函数是opendir -> ...
c c++ c语言遍历文件夹 c语言读文件 c语言写文件
例如,在Windows系统中,可以使用`FindFirstFile`、`FindNextFile`和`FindClose`等API来遍历文件;在Linux或Unix系统中,可以使用`opendir`、`readdir`和`closedir`等函数进行操作。 以C++为例,遍历磁盘目录的代码...
在Linux系统中,C语言是实现底层操作的强大工具,其中包括遍历指定路径下的所有文件和文件夹。这个程序的核心在于使用Linux系统调用,如`opendir()`、`readdir()`和`closedir()`,来读取目录内容,并通过递归的方式...
在IT领域,特别是软件开发中,遍历文件目录树是一项常见的任务。对于C#开发者来说,理解如何非递归地后序遍历文件目录树是非常有用的技能。后序遍历通常指的是先访问子节点,再访问父节点的遍历顺序。这种遍历方式在...
在VC++编程环境中,遍历文件目录是常见的任务,它涉及到操作系统I/O操作和文件系统交互。本篇文章将深入探讨如何使用C++标准库和Windows API来实现这一功能,特别是针对给定的文件夹进行深度优先或广度优先的遍历,...
在C#编程中,遍历指定目录下的所有文件和子目录是一项常见的任务,这通常用于文件管理和系统操作。本文将详细讲解如何使用C#来实现这一功能,以及相关的知识点。 首先,我们需要引入`System.IO`命名空间,这个命名...
在Java编程语言中,遍历一个目录下的所有文件和子目录是一项常见的任务,尤其是在处理文件系统操作时。这里我们将深入探讨如何使用Java API来实现这一功能,并解释相关的知识点。 首先,Java提供了`java.io.File`类...
在Windows系统中,遍历根目录文件以及搜索特定文件是一项常见的任务,这通常涉及到文件系统的操作和编程。本文将深入探讨使用Visual C++(VC)进行这类操作的技术细节。 首先,我们要了解Windows API中的文件系统...
使用Dir函数遍历文件和目录 Dir函数是VBScript和VB编程中一个非常重要的函数,用于遍历文件和目录。下面将详细介绍Dir函数的语法、使用方法和递归调用,以便更好地理解和应用Dir函数。 Dir函数语法 Dir函数的语法...
在C#编程中,有时我们需要获取文件系统的详细信息,例如遍历多层目录,并将这些信息存储起来,以便后续处理或记录。在这种情况下,我们可以利用递归算法来遍历目录结构,然后使用XML来保存数据,因为XML是一种结构化...
在Windows环境下,使用VC++(Visual C++)进行文件操作是常见的任务之一,其中包括遍历文件和目录。本篇文章将详细探讨如何在VC++中实现文件遍历,并给出具体的操作步骤和相关知识点。 首先,我们要了解遍历文件的...
遍历指定目录下文件的基本思路是通过操作系统提供的文件搜索接口,逐一获取目录下的所有文件及子目录,并对其进行相应的处理。在C++中,`CFileFind`类提供了这样的功能,它允许程序员查找一个或多个匹配特定模式的...
### Java中遍历某个目录下的所有文件及文件夹中的文件 在Java开发中,经常会遇到需要遍历指定目录及其子目录下所有文件的情况。本文将详细介绍如何使用Java标准库中的`java.io.File`类来实现这一功能。我们将通过一...
在C++编程中,遍历目录并打印文件及其后缀是一项常见的任务,特别是在处理文件系统操作时。在Visual Studio 2013环境下,我们可以利用C++标准库中的`<filesystem>`库(在C++17中引入)或旧版的`<dirent.h>`库来实现...