gpt4 book ai didi

c++ - FindFirstFile 不适用于通配符

转载 作者:搜寻专家 更新时间:2023-10-31 00:19:40 25 4
gpt4 key购买 nike

我正在尝试使用 FindFirstFile 函数来遍历我所有的 .txt 文件,但是我收到了 INVALID_VALUE_HANDLE 错误试试吧,这是我的功能:

int search(LPSTR lpszPath)
{
WIN32_FIND_DATA WFD;
HANDLE hSearch;
CHAR szFilePath[MAX_PATH + 1];
PathCombine(szFilePath, lpszPath, "*.txt");
hSearch = FindFirstFile(szFilePath,&WFD);

if(hSearch == INVALID_HANDLE_VALUE)
{
printf("Error Handle Value\n");
}

while (FindNextFile(hSearch,&WFD))
{
if(strcmp(WFD.cFileName,"..") && strcmp(WFD.cFileName,"."))
{

if(WFD.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
PathCombine(szFilePath, lpszPath, WFD.cFileName);
search(szFilePath);
}
else
{
PathCombine(szFilePath, lpszPath, WFD.cFileName);
printf("%s\n",szFilePath);
}
}
}
FindClose(hSearch);
return 0;

我认为问题出在通配符上,有什么建议吗?

最佳答案

我想问题是这只会找到匹配 *.txt 的对象。您需要递归搜索到目录。但它只会下降到与 *.txt 匹配的目录中。

对于这样的递归搜索,您必须枚举所有没有 *.txt 通配符的目录。自己进行通配符测试可能更容易。

所以把代码改成:

PathCombine(szFilePath, lpszPath, "*");

并针对扩展名 .txt 单独测试每个文件。

正如其他人所指出的,您没有检查找到的第一个文件。您必须将 FindNextFile 移动到循环的末尾。

关于c++ - FindFirstFile 不适用于通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7674195/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com