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.
2回目の編集
私が言及したコメントに埋もれています:
GetCurrentDirectory を試してみたところ、正しい絶対パスが返されますが、先頭に
\\?\