以下程序只能在Windows下运行,完全按照c语言编写。但是添加了windows.h库。以下程序在Visual C++ 2008下编译通过。
#undef UNICODE // 如果你不知道什么意思,请不要修改 #define MAX_RESULT 256 #include <stdio.h> #include <stdlib.h> #include <Windows.h> char** EnumFiles(const char *directory, int *count) { WIN32_FIND_DATA FindFileData; HANDLE hFind; char result[MAX_RESULT][MAX_PATH]; char **returnresult; char pattern[MAX_PATH]; int i = 0, j; // 开始查找 strcpy(pattern, directory); strcat(pattern, "\\*.*"); hFind = FindFirstFile(pattern, &FindFileData); if (hFind == INVALID_HANDLE_VALUE) { *count = 0; return NULL; } else { do { strcpy(result[i++], FindFileData.cFileName); } while (FindNextFile(hFind, &FindFileData) != 0); } // 查找结束 FindClose(hFind); // 复制到结果中 returnresult = (char **)calloc(i, sizeof(char *)); for (j = 0; j < i; j++) { returnresult[j] = (char *)calloc(MAX_PATH, sizeof(char)); strcpy(returnresult[j], result[j]); } *count = i; return returnresult; } void main() { int i, count; char ** result; char directory[MAX_PATH]; printf("请输入要查询的文件夹:"); scanf("%s", directory); result = EnumFiles(directory, &count); for (i = 0; i < count; i++) printf("%s\n", result[i]); } ![]() 提问人的追问 2010-02-08 18:47
非常感谢,呵呵,还有两个疑问: 1.strcpy(pattern, directory); 2. while (FindNextFile(hFind, &FindFileData) != 0); 意思是一直向后查找文件,直到查找失败是吗? 失败的情况是什么呢,包括hFind = INVALID_HANDLE_VALUE吗,会不会越界什么的啊? 回答人的补充 2010-02-08 18:56
1. 可以的,在Win32中 C:\\Windows和 C:\Windows是等价的。
2. FindNextFile如果没有下一个文件可以查找就返回NULL. PS: MSDN上FindNextFile的描述 http://msdn.microsoft.com/en-us/library/aa364428%28VS.85%29.aspx |
|
来自: xue_dong5437 > 《我的图书馆》