2013-01-08 46 views
1

CreateFile上的MSDN頁面顯示:字符串"\\.\C:\"可用於打開C:卷的文件系統。但是,以下代碼始終返回錯誤:ERROR_PATH_NOT_FOUND。如何在CreateFile中打開卷的文件系統?

HANDLE h = CreateFile(L"\\\\.\\C:\\", FILE_READ_ATTRIBUTES, 
    FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE, 0, OPEN_EXISTING, 0, 0); 

如何正確傳遞參數?

+0

你想怎麼做與最終的句柄? –

+0

我只是想知道爲什麼它沒有按預期工作。我最初的意圖是列出根目錄下的文件。 – xmllmx

+0

在我的情況下,我得到INVALID_HANDLE_VALUE –

回答

5

如果你想要一個卷句柄器(用於I/O控制代碼),你會需要放棄結尾的斜線。

爲了獲得根目錄的句柄,您需要保留尾部斜槓並通過參數dwFlagsAndAttributes中的FILE_FLAG_BACKUP_SEMANTICS標誌。這是在MSDN頁面「目錄」標題下記錄的。例如,如果您打算致電GetFileInformationByHandleGetFileInformationByHandleEx,則這是您想要執行的操作。

但是,通常情況下,您不會打開根目錄的句柄以列出文件。相反,您可以使用FindFirstFile/FindNextFile或其中一個相關功能。

+0

非常感謝,哈利。真的行! – xmllmx

0

嘗試下探結尾的斜線:

L"\\\\.\\C:" 
+0

我認爲你誤解了我的意思。我知道如果尾部的反斜槓被丟棄,它會好的。但是,雖然文檔明確聲明尾部反斜槓是有效的參數,但CreateFile始終返回錯誤。這是我的問題的關鍵點。 – xmllmx

相關問題