2013-01-08 31 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

相关问题