ファイルを常にポーリングしています。読み込みの基準を満たしているファイルが見つかるたびにファイルを開き、解析します。C++ ifstreamは書き込み中にファイルを開こうとします。
string newLine;
ifstream fileReader;
fileReader.open(filename.c_str());
while(!fileReader.eof())
{
getline(fileReader, newLine);
// do some stuff with the line...
}
filereader.close();
上記のコードは、1秒ごとに実行され、新しいファイルのディレクトリをチェックするループにあります。私の問題は、処理するためにファイルをフォルダーに転送するときに、私のループがファイルを見つけ、ファイルの名前をifstreamに渡して誰がそれを開き、不完全なファイルを解析しようとしているかということです。ファイルを解析する前にファイルの書き込みが完了するまでifstreamを待機させるにはどうすればよいですか?
編集: 投稿者は私の問題を誤解しているようですので、ここで問題をよく言いたいと思っています。私は2つのディレクトリを持つ
mydirectory/
mydirectoryParsed/
私のコードが動作する方法は、それが彼らを見つけたときmydirectoryなどのファイルのための私のプログラムのチェックが/と、それらを解析し、ファイル内の情報を使用していることです。ファイルへの書き込みは行われません。ファイルの解析が終了すると、ファイルはmydirectoryparsedに移動されます。/
問題は、ネットワーク経由でmydirectoryにファイルを転送するとき/ ifstreamはmidtransferファイルを見て、ディレクトリへの書き込みを終了する前にファイルを読み込みます。 。ファイルを解析する前にファイルが完全に書き込まれるまで、ifstreamをどのように待機させるのですか?
ファイルハンドルを開いている間に、そのファイルを書き込んでいる人が読み取りアクセスを拒否するようにしてください。 – ildjarn