3
__int64 i64FreeBytes
unsigned __int64 lpFreeBytesAvailableToCaller,
                 lpTotalNumberOfBytes,
                 lpTotalNumberOfFreeBytes; // variables used to obtain 
                                           // the free space on the  drive

GetDiskFreeSpaceEx (Manager.capDir,
(PULARGE_INTEGER)&lpFreeBytesAvailableToCaller,
(PULARGE_INTEGER)&lpTotalNumberOfBytes,
(PULARGE_INTEGER)&lpTotalNumberOfFreeBytes);

i64FreeBytes = lpTotalNumberOfFreeBytes;
_tprintf(_T ("Number of bytes free on the drive:%I64u \n"),
     lpTotalNumberOfFreeBytes);

Windows CE コマンド ライン アプリケーションであるデータ管理ルーチンに取り組んでいます。上記のコードは、Manager.capdir フォルダー (ディレクトリのフル パス名を含む変数) を含む特定のドライブの空きバイト数を取得する方法を示しています。

私の質問は、上記のコード (_tprintf ステートメント) によって報告される空きバイト数が、ドライブの空きバイト数と一致しないことです (ドライブを右クリックして確認します)。

この違いの理由を知りたいですか?

4

3 に答える 3

1

GetDiskFreeSpaceExのドキュメントを(編集して)引用し、強調します:

lpFreeBytesAvailable [アウト、オプション]-

呼び出し元のスレッドに関連付けられているユーザーが使用できる、ディスク上の空きバイトの合計数を受け取る変数へのポインター。

このパラメーターは NULL にすることができます。

ユーザーごとのクォータが使用されている場合、この値はディスク上の空きバイトの合計数よりも少ない場合があります。

lpTotalNumberOfBytes [出力、オプション]-

呼び出しスレッドに関連付けられているユーザーが使用できる、ディスク上の合計バイト数を受け取る変数へのポインター。

このパラメーターは NULL にすることができます。

ユーザーごとのクォータが使用されている場合、この値はディスク上の合計バイト数よりも少ない場合があります。

ディスクまたはボリュームの合計バイト数を確認するには、IOCTL_DISK_GET_LENGTH_INFO を使用します。

つまり、この数値はユーザーによって異なり、Explorer によって返される値と一致させたい場合は、 を使用しますlpFreeBytesAvailable

于 2009-03-09T19:59:23.963 に答える
1

ディスク クォータのないシングル ユーザー マシンを使用しています。あなたのコードをダイアログ ベースの MFC アプリケーションに投稿し、それを実行しました。唯一の条件として、"C:\" を lpDirectoryName パラメーターとして使用したため、システムによって報告されたドライブの空き容量と比較できました。空き容量はフォルダーではなくドライブにとってのみ意味があるため、これは論理的に思えました。

最初は同様の問題が発生していると思いましたが、チェックを再実行し (ボタンに結び付けました)、その時点でのプロパティ ダイアログと同じ結果になりまし。ドライブの空き容量はかなり動的な量のようです-システムドライブであれば、これはそれほど驚くべきことではありません-また、他の投稿者が非常に正確に報告した基準がなくても、プロパティとまったく同じ数が表示されない場合がありますダイアログは、実行された時点で報告します。

于 2009-03-09T20:26:46.580 に答える
0

ひとつの可能性が思い浮かびます。おそらく、パーティショニングによって失われたスペースを考慮していない可能性があります (Windows は通常、ドライブの最後に 8MB をスラックとして残します)。基本的に、物理ドライブに残されたスペースと、パーティションによって表される論理ドライブには違いがあります。または、ファイルシステム自体に失われたスペース。

これらが実際に当てはまるかどうかはわかりませんが、調べてみたいと思います。

于 2009-03-09T17:09:42.687 に答える