8

C++ でいくつかのファイル システムを実装しています。今まで使ってfstreamいたのですが、排他モードで開けないことに気づきました。多くのスレッドがあるため、複数の読み取りを許可したいのですが、書き込みモードでファイルを開くときに、ファイルを排他モードで開きたいですか?
それを行う最良の方法は何ですか?いくつかの機能を提供すると思いBoostます。また、他に可能性はありますか?簡単な例も見たいです。C++ で行うのが簡単ではない場合、C で書くこともできます。

私はWindowsを使用しています。

4

5 に答える 5

3

アプリが Windows でのみ動作する場合は、win32 API 関数「CreateFile()」を選択してください。

例: HANDLE hFile = ::CreateFileW(lpszFileFullPathName, GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, NULL, NULL);

于 2013-04-22T13:15:05.510 に答える
0

ファイルがすでに書き込みモードで開かれている場合は、手動でそのファイルを開かないようにすることができます。書き込みモードで開いたファイルを内部的に追跡するだけです。

おそらく、ファイル名をハッシュして、書き込みアクセスで開いたときにテーブルに保存できます。これにより、ファイルが開かれているかどうかをすばやく検索できます。

于 2013-04-22T06:52:11.673 に答える
0

ファイルの名前を変更し、新しい名前で更新して、名前を元に戻すことができます。やりましたが、ちょっと重いです。

于 2016-05-31T19:00:39.763 に答える