我试图在我的 C++ win32 应用程序中使用 GetDiskFreeSpaceEx 来获取“当前”驱动器上的总可用字节数。我在 Windows 7 上。
我正在使用这个示例代码:http: //support.microsoft.com/kb/231497
它有效!嗯,差不多。如果我提供驱动器,它会起作用,例如:
...
szDrive[0] = 'C'; // <-- specifying drive
szDrive[1] = ':';
szDrive[2] = '\\';
szDrive[3] = '\0';
pszDrive = szDrive;
...
fResult = pGetDiskFreeSpaceEx ((LPCTSTR)pszDrive,
(PULARGE_INTEGER)&i64FreeBytesToCaller,
(PULARGE_INTEGER)&i64TotalBytes,
(PULARGE_INTEGER)&i64FreeBytes);
fResult 变为true
,我可以继续准确计算可用的空闲字节数。
然而,问题是我希望不必指定驱动器,而只需使用“当前”驱动器。我在网上找到的文档(这里)状态:
lpDirectoryName [输入,可选]
磁盘上的目录。如果此参数为NULL,则该函数使用当前磁盘的根。
但是,如果我为目录名称传入 NULL,则 GetDiskFreeSpaceEx 最终会返回false
,并且数据仍然是垃圾。
fResult = pGetDiskFreeSpaceEx (NULL,
(PULARGE_INTEGER)&i64FreeBytesToCaller,
(PULARGE_INTEGER)&i64TotalBytes,
(PULARGE_INTEGER)&i64FreeBytes);
//fResult == false
这很奇怪吗?我肯定错过了什么吗?任何帮助表示赞赏!
编辑
根据 JosephH 的评论,我进行了 GetLastError() 调用。它返回了 DWORD:
ERROR_INVALID_NAME 123 (0x7B)
The filename, directory name, or volume label syntax is incorrect.
第二次编辑
埋在我提到的评论中:
我尝试了 GetCurrentDirectory 并返回正确的绝对路径,除了它的前缀
\\?\