簡體   English   中英

C ++,如果文件在被讀取時移動會發生什么?

[英]C++, what happens if file moved while being read?

如果C ++正在讀取文件(比如一個包含20,000行的csv文件)並且在讀取的中途,C ++會如何表現,另一個進程會刪除該文件(假設它是一個ifstream)。

我是否遇到了段錯誤,或者我存儲的行的向量是否有10,000行並且沒有錯誤表明出現了問題?

同樣,如果我通過ofstream寫入並且被刪除中斷會發生什么? 在這種情況下,如果中斷是中途,我的輸出文件是否只包含最后10,000行?

這取決於操作系統。

如果您使用的是Unix-y操作系統,則將繼續讀取/寫入數據,因為刪除僅僅是對包含目錄和/或inode的更新,因此您不會影響文件的數據。

但是,如果文件數據所在的磁盤塊可能會被正在讀取的較新文件重新使用(再次取決於操作系統),那么一旦完成緩沖區中的數據,基本上就會讀取錯誤的文件數據。

如果您在Windows上,正如Seth Carnegie在評論中正確指出的那樣,如果文件被打開以供閱讀,則文件會自動鎖定(因而無法取消)。

我猜這是高度依賴系統的。 由於Linux可能會繼續工作,而Windows讓你頭疼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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