|
以下程序只能在Windows下運(yùn)行,完全按照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); } // 查找結(jié)束 FindClose(hFind); // 復(fù)制到結(jié)果中 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
非常感謝,呵呵,還有兩個(gè)疑問: 1.strcpy(pattern, directory); 2. while (FindNextFile(hFind, &FindFileData) != 0); 意思是一直向后查找文件,直到查找失敗是嗎? 失敗的情況是什么呢,包括hFind = INVALID_HANDLE_VALUE嗎,會(huì)不會(huì)越界什么的啊? 回答人的補(bǔ)充 2010-02-08 18:56
1. 可以的,在Win32中 C:\\Windows和 C:\Windows是等價(jià)的。
2. FindNextFile如果沒有下一個(gè)文件可以查找就返回NULL. PS: MSDN上FindNextFile的描述 http://msdn.microsoft.com/en-us/library/aa364428%28VS.85%29.aspx |
|
|