Visual C 的问题:读取目录中的所有文件
我正在尝试读取目录中的所有文件。我有以下代码:
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);
}
问题是,当我执行代码时,它会导致无限循环。输出字符也很奇怪,例如“File”。
I'm trying to read all files in a directory. I have the following code:
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);
}
The problem is that when I execute the code it results in an infinite loop. Also the output characters are strange, like "File ".
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我认为您没有以后续的方式使用字符和宽字符。您应该使用 Wide char 和 wchar_t 类型的函数,反之亦然。 (但这对我来说是一个编译错误,所以它也可能取决于某种项目设置。)
并且 while 循环中的退出条件也是错误的,它应该测试
FindNextFile
而不是!查找下一个文件
。无限循环可能是因为这种情况,就好像它找不到任何文件一样,它将永远运行。此外,您还应该测试 FindFirstFile 的返回值,如果找不到任何文件,则不要进入循环。
I think you are not using chars and wide chars in a consequent way. You should either use functions with wide char and wchar_t type or vice versa. (But it was a compile error for me so it may depend on some kind of project settings as well.)
And your exit condition in the while loop is also wrong it should test for
FindNextFile
and not!FindNextFile
. The infinite loop may be because of this condition as if it doesn't find any files it will run forever.Also you should test for the return value of
FindFirstFile
and not go into the loop if it doesn't find any files.您正在调用 !FindNextFile 而不是 FindNextFile,而且您也没有检查原因
FindNextFile 失败,因此您无法确定是否所有文件都已处理。
使用这样的东西。
You are calling !FindNextFile instead of FindNextFile, also you are not checking why
the FindNextFile fails, so you can't be sure if all the files were processed.
Use something like this.
你不能像下面这样使用.Net吗:
这是ac#示例,但你可以在C++中对每个示例使用相同的。希望这有帮助。
Can't you just use .Net like below:
This is a c# example but you can use for each in C++ the same. Hope this helps.