FindFileFirst()每个路径的句柄值都无效

时间:2009-09-24 03:46:02

标签: c winapi

我正在尝试让FindFileFirst()windows API调用工作,并且每次尝试都会失败。我已经尝试了,C:\ *。*, .txt,C:\ .txt但它甚至没有迭代目录名称。不知道该怎么办。当我调用GetLastError()时,我得到了ERROR_FILE_NOT_FOUND 2(0x2)。感谢您提供任何帮助。

HANDLE hFind;
LPWIN32_FIND_DATA FindFileData;

hFind = FindFirstFile("*.*", &FindFileData);

if(hFind == INVALID_HANDLE_VALUE)
{
    printf("\nFindFirstFile failed (%u)\n",GetLastError());
    return;
}

do
{
    if(FindFileData->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
    {
        if(FindFileData->cFileName[0] != '.')
            continue;
        else
            searchDir(makePath(path, FindFileData->cFileName));
    }

    printf("Found %s %s\n",
        FindFileData->dwFileAttributes,FindFileData->cFileName);
    FindClose(hFind);
}
while(FindNextFile(hFind, &FindFileData));

FindClose(hFind);

3 个答案:

答案 0 :(得分:2)

LPWIN32_FIND_DATA FindFileData;

您正在使用FindFileData指针而不为其分配内存。

使用这种方式..(“删除LP”)

WIN32_FIND_DATA FindFileData; //这将使用堆栈内存

然后引用FindFileData.dwFileAttributes等成员而不是FindFileData-> dwFileAttributes

答案 1 :(得分:0)

你应该确保双重斜杠路径

即。 “c:\\*.*

它应该可以正常工作。

答案 2 :(得分:0)

现在来自FindFirstFile Function.

的惊喜
  

如前所述,你不能使用   尾随反斜杠()   lpFileName输入字符串   FindFirstFile,因此可能不是   明显如何搜索root   的目录即可。如果你想看文件   或获取根的属性   目录,以下选项   适用:

     
      
  • 要检查根目录中的文件,可以使用“C:*”和   通过使用逐步执行目录   FindNextFile。

  •   
  • 要获取根目录的属性,请使用GetFileAttributes   功能

  •   

例如,您无法使用"C:\\*.txt"搜索根目录中的文本文件 但在子目录中它会起作用。