FindFirstFile在根路径上失败

c00*_*0fd 4 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();
}
Run Code Online (Sandbox Code Playgroud)

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

  • 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 -没有错误

知道为什么吗?

rod*_*igo 5

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

使用时,D:\1您只是使用限制性很强的文件模式(1)来过滤中的文件D:\,但是当您仅使用D:\D:根本不使用任何模式时!

共享资源也是如此。请注意,\\SRV-1\share这不能算作模式,因为\\SRV-1不能将其视为目录。