我正在尝试读取目录中的所有文件。我有以下代码:
void scanDirectory(char* dir)
{
WIN32_FIND_DATA FindFileData;
HANDLE hFind = INVALID_HANDLE_VALUE;
char DirSpec[MAX_PATH]; // directory specification
strcpy(DirSpec, dir);
strcat(DirSpec, "\\*");
hFind = FindFirstFile(DirSpec, &FindFileData);
int i = 0;
do {
i++;
printf("%d \n", i);
if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
printf(" %s <DIR>\n", FindFileData.cFileName);
}
else
{
printf("File %s\n", FindFileData.cFileName);
}
} while(!FindNextFile(hFind, &FindFileData));
FindClose(hFind);
}
问题是当我执行代码时会导致无限循环。输出字符也很奇怪,比如“文件”。
答案 0 :(得分:1)
我认为你不会以后续的方式使用字符和宽字符。您应该使用具有宽字符和wchar_t类型的函数,反之亦然。 (但这对我来说是一个编译错误,所以它也可能取决于某种项目设置。)
你在while循环中的退出条件也是错误的,它应该测试FindNextFile
而不是!FindNextFile
。无限循环可能是因为这种情况,好像它没有找到它将永远运行的任何文件。
此外,您应该测试FindFirstFile
的返回值,如果找不到任何文件,则不要进入循环。
答案 1 :(得分:0)
你正在调用!FindNextFile而不是FindNextFile,你也没有检查原因 FindNextFile失败,因此您无法确定是否已处理所有文件。 使用这样的东西。
WIN32_FIND_DATA stFindData;
HANDLE hFind = FindFirstFile(cSearchPattern, &stFindData);
if(hFind != INVALID_HANDLE_VALUE)
{
do
{
// Process File
}
while (FindNextFile(hFind, &stFindData) != 0);
DWORD dwError = GetLastError();
if (dwError != ERROR_NO_MORE_FILES)
{
// Not All Files processed, deal with Error
}
FindClose(hFind);
}
答案 2 :(得分:-3)
你不能像下面这样使用.Net:
System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(Path);
System.IO.FileInfo[] files = dir.GetFiles();
foreach (System.IO.FileInfo file in files)
{
// Do whatever you need with the file info...
string filename = file.Name;
string fullFilename = file.FullName;
}
这是一个c#示例,但您可以在C ++中使用相同的每个。希望这会有所帮助。