0

ファイルを開くコストをかけずに、ファイルが存在するかどうかを確認する方法はありますか(今のところWindowsのみ)?

現在使用しているもの:

ifstream ifile(FilePath);

if(ifile){

しかし、問題は、ファイルをブーストmapped_regionに配置し、それによってファイルを2回開くことです。ファイルを開かずにファイルの存在を確認できればもっと良いでしょう。

4

3 に答える 3

3

チェックしてから開こうとしても、ファイルをチェックしてから開こうとするまでの間に、ファイルが移動または削除される可能性が常にあることに注意してください。これは、これらの種類の操作では常に危険です。

マップされた領域の作成の一部として単純にファイル バッファを開く方が効率的かもしれませんが、interprocess_exceptionエラーが発生した場合にスローされるのをキャッチする準備をしておく必要があります。

于 2012-12-16T14:34:59.973 に答える
1

procmon (Sysinternals から) をプログラムにアタッチし、Windows がフードの下で何を行っているかを調べてみると、同じ量のオーバーヘッドが発生するか、CreateFileまたはそれによって発生するオーバーヘッドは、パフォーマンスの点で目に見える違いはありません。GetFileAttributes

NTFS ジャーナルを使用して特定の処理を高速化することができますが、これは特定のワークロードにのみ役立ち、一般的にディスク上のファイルの可用性を確認する場合には役立ちません。

于 2012-12-16T14:34:46.400 に答える
0

アクセス (stduni.h)

確認したいのはaccess(FilePath, F_OK)==0 です

これは、ファイルが存在するかどうかを確認するための非常に普遍的な方法です。コンポーネント 10 で述べたように、並列シナリオで発生する可能性があるたびにチェックからファイルが存在することを確認することはできませんが、TBH はそれほど重要ではありません。エラーが発生した場合は、システムの GetLastError (MSDN) 関数を使用するか、エラーの処理をコンパイラ/システムに任せることができます。自分で処理する場合は、名前を尋ねて再試行できます。

于 2015-01-29T10:25:23.540 に答える