重複の可能性:
ディスク上のファイルのサイズを取得する
C#/windows を使用して、ディスク上の特定のファイルに使用されている実際のバイト数を取得する方法はありますか?
私のアプリケーションは、FileSystemWatcher に似た「ウォッチ」フォルダーを実装しています。一部の監視フォルダーは共有ストレージ (ネットワークとファイバーチャネル SAN の両方) に存在し、その他はローカルに接続されたストレージに存在します。
ファイルは、1 GB から 500 GB を超えるサイズの、完全に制御できないプロセスによって監視フォルダーにコピーされます。共有ファイル システムの性質上、ファイルを「排他的に」開くときに例外 (FileMode.Open、FileAccess.Read、FileShare.None) を期待しても機能しません。
これらのウォッチ フォルダは、ファイルが完全にコピーまたは閉じられるまでアクションを実行することは想定されていません。そうしないと、ダウンストリームで問題が発生する可能性があります。
ディスクで使用される「実際の」ファイルサイズを取得するために、次のことを試しました。
- System.IO.FileInfo
- GetFileSizeEx (kernel32 p/invoke)
- FindFirstFileEx (kernel32 p/invoke)
- GetCompressedFileSize & GetDiskFreeSpace (kernel32 p/invoke)
どんな提案でも大歓迎です。Windows OS の制限に対処しているように見えますか?