最近帮朋友做一个程序题目,题目最关键的问题就是查找出给定路径下的所有文件。原以为这种常见的问题应该在网上随便能搜到,事与愿违,搜到的大多不能跑(各种不给力),所以自己就稍微借鉴了前人的代码,作了一些修改,很幸运最终是能用了,嘿嘿。。。
下面是程序代码:
#include <stddef.h>
#include <stdio.h>
#include <windows.h>
#include <sys/types.h>
#include <sys/stat.h>
FILE *file; /*将遍历出的文件保存到特定的文件,本文采用save.txt*/
/**查找函数*/
void findAllFile(char *pFilePath)
{
WIN32_FIND_DATA FindFileData;
HANDLE hFind = INVALID_HANDLE_VALUE;
char DirSpec[MAX_PATH+1];
DWORD dwError;
strncpy(DirSpec, pFilePath, strlen(pFilePath)+1);
SetCurrentDirectory(pFilePath);
strncat(DirSpec, "//*.*", 5);
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)
{
char path[MAX_PATH+1];
strcpy(path, pFilePath);
strncat(path, "//", 2);
strcat(path, FindFileData.cFileName);
printf("%s/n", path);
fputs(path, file);
fputs("/n", file);
}
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)
{
char path[MAX_PATH+1];
strcpy(path, pFilePath);
strncat(path, "//", 2);
strcat(path, FindFileData.cFileName);
printf("%s/n", path);
fputs(path, file);
fputs("/n", file);
}
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);
}
}//end while
dwError = GetLastError();
FindClose(hFind);
if (dwError !=ERROR_NO_MORE_FILES)
{
printf("Find file error.Error is %u/n", GetLastError());
return;
}
}//end else
}
/*主函数*/
int main()
{
file = fopen("save.txt", "w"); /*打开文件*/
char input_path[50];
printf("please enter input_path:/n");
scanf("%s", &input_path); /*要查找的路径*/
findAllFile(input_path); /*执行查找*/
fclose(file); /*关闭文件*/
int a;
scanf("%d", &a);
return 0;
}
运行结果:
输入:D:/test
输出:
D:/test/subtest/subsubtest/test.rar
D:/test/subtest/test3.txt
D:/test/subtest/test4.txt
D:/test/test1.txt
D:/test/test2.txt
程序中最重要的就是了解 WIN32_FIND_DATA结构、FindFirstFile函数、FindNextFile函数和递归思想。这样网上都有很多资料,不再做详细说明。完。