【问题标题】:FindFileFirst() Invalid handle value for every pathFindFileFirst() 每个路径的句柄值无效
【发布时间】:2009-09-24 03:46:01
【问题描述】:

我正在尝试让 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);

【问题讨论】:

    标签: c winapi


    【解决方案1】:

    LPWIN32_FIND_DATA FindFileData;

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

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

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

    然后引用 FindFileData.dwFileAttributes 之类的成员而不是 FindFileData->dwFileAttributes

    【讨论】:

      【解决方案2】:

      你应该确保路径是双斜线

      即"c:\\*.*"

      它应该可以正常工作。

      【讨论】:

        【解决方案3】:

        现在来自FindFirstFile Function.的惊喜

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

        • 要检查根目录中的文件,您可以使用“C:*”和 通过使用单步执行目录 查找下一个文件。

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

        比如你不能使用"C:\\*.txt"来搜索根目录下的文本文件
        但在子目录中它会起作用。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-08-23
          • 1970-01-01
          • 1970-01-01
          • 2016-01-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多