2014-02-13 46 views
3

我用下面的代碼,以獲取有關文件系統的目錄信息失敗:在用FindFirstFile根路徑

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

設備的根目錄不是普通的目錄項,所以'FindFirstFile'不能返回關於它的信息。您可以使用諸如'GetVolumeInformation'和'GetDiskFreeSpaceEx'之類的調用來查找有關卷的各種信息。 –

+0

@JonathanPotter:謝謝。但是,我需要知道我的路徑是否是根。這就造成了額外的問題... – c00000fd

+1

好的。我發現至少我可以使用'GetFileAttributesEx'作爲屬性。該API似乎沒有將根路徑與其他路徑區別開來。 – c00000fd

回答

4

FindFirstFile()旨在用於枚舉目錄的內容。因此,它旨在與文件模式一起使用,例如D:\*

當您使用D:\1你只是用一個非常嚴格的文件模式(1)在D:\過濾文件,但是當你只使用D:\D:沒有模式可言!

對於共享資源也是如此。請注意,\\SRV-1\share不算作模式,因爲\\SRV-1不能被視爲目錄。