FindFirstFile在根路径上失败

时间:2014-02-13 00:22:29

标签: c++ windows winapi ntfs

我正在使用以下代码获取有关文件系统目录的信息:

LPCTSTR pStrPath = L"D:\\1";
WIN32_FIND_DATA wfd;
HANDLE hDummy = ::FindFirstFile(pStrPath, &wfd);
if(hDummy != INVALID_HANDLE_VALUE)
{
    //Use 'wfd' info
    //...

    ::FindClose(hDummy);
}
else
{
    int error = ::GetLastError();
}

代码工作正常,除非我指定了根路径:

  • D:\ - 错误代码ERROR_FILE_NOT_FOUND
  • D: - 错误代码ERROR_FILE_NOT_FOUND
  • \\SRVR-1\share - 错误代码ERROR_BAD_NET_NAME
  • \\SRVR-1\share\ - 错误代码ERROR_BAD_NET_NAME
  • \\SRVR-1\HiddenShare$ - 错误代码ERROR_BAD_NET_NAME

但它适用于以下情况:

  • D:\1 - 没有错误
  • \\SRVR-1\share\1 - 没有错误
  • \\SRVR-1\HiddenShare$\1 - 没有错误

知道为什么吗?

1 个答案:

答案 0 :(得分:4)

FindFirstFile()用于枚举目录的内容。因此,它意味着与文件模式一起使用,例如D:\*

当您使用D:\1时,您只是使用限制性很强的文件模式(1)来过滤D:\中的文件,但只使用D:\或{ {1}}根本没有模式!

共享资源也是如此。请注意,D:不计为模式,因为\\SRV-1\share不能被视为目录。