1

Windows OS では、フォルダーを右クリックすると、フォルダー サイズ情報を含むプロパティ情報が表示されます。ここで、Windows API を使用してフォルダー サイズを取得したいのですが、FindFirstFile/FindNextFile を使用してすべてのファイルを列挙したくありません。前もって感謝します。

以下のコードを試しましたが、無効なデータでサイズが返されます。

HANDLE hFile = CreateFile(tsFolderPath.c_str(), GENERIC_READ, FILE_SHARE_READ, 
    NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL|FILE_FLAG_BACKUP_SEMANTICS, NULL); 

LARGE_INTEGER fileSize; 
GetFileSizeEx(hFile, &fileSize);
CloseHandle(hFile);
4

2 に答える 2

3

私の知る限り、フォルダのサイズを直接取得する API 関数はありません。含まれているファイルを反復処理する必要があります。

編集: SOに関する同様の質問を検討してください:

于 2013-08-29T06:45:33.240 に答える
2

あなたの質問にはいくつかの答えがありますが、1つは主に専門的なものです。

NtQueryInformationFile1 つ目は、 (または) を使用zwQueryInformationFileしてデータを収集することです。これにより、ディレクトリ内のすべてのファイルに関する情報を 1 回の呼び出しで返すことができ、通常の関数で必要なループを回避できます。ただし、使用にはやや注意が必要です。ドキュメントは主にデバイス ドライバ用です。それを使用するアプリケーションは、Win32 ではなくネイティブ アプリケーションです。これに関するドキュメントは最小限です。

2 番目の可能性は、ループを記述することですが、 の代わりにFindFirstFileを使用しますFindFirstFileEx。これにより、ディレクトリ内のすべてのファイルを列挙する必要がないため、検索を指定FindExInfoBasicして最適化できるため、一度にできるだけ多くの関連データを読み取る必要があります。FIND_FIRST_EX_LARGE_FETCHcAlternateFilename

于 2013-08-29T07:39:29.407 に答える