簡體   English   中英

C ++ ifstream在寫入時嘗試打開文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM