[英]C++ ifstream tries to open file while being written
我不斷地為一個目錄輪詢文件,每當我看到一個符合某些閱讀標准的文件時,我打開文件並解析它。
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看到這些文件傳輸時,並在完成寫入目錄之前開始讀取它們。 在解析文件之前,如何使ifstream等到文件完全寫入?
不要將文件直接傳輸到程序正在觀看的目錄中; 相反,將它們轉移到同一驅動器上的不同目錄中,然后在傳輸完成后,將它們移動到監視目錄中。 這樣,完整文件在單個原子操作中出現在監視目錄中。
或者,您可以在監視目錄中使用命名約定 - 將后綴(如“.partial”)附加到正在傳輸的文件,然后重命名該文件以在傳輸完成時刪除后綴。 讓程序忽略名稱以后綴結尾的文件。
每次寫入文件時都不應該打開文件。 打開一次!
一些偽代碼將是:
1- Open file 2- Get the data you want to write, treat that data 3- Call the write to file function 4- Loop until you have nothing left to write 5- Close de file
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.