2012-07-17 71 views
2

如果C++在讀取文件(比如說有20000行的csv文件)時讀取的過程如何,另一個過程刪除文件(可以說它是一個ifstream)。C++,如果文件在讀取時移動會發生什麼?

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

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

+0

爲什麼不直接在文件上讀取鎖定以防止文件在打開時被移動? – vcsjones 2012-07-17 20:57:30

+2

Windows(以及我假定其他操作系統)可以防止一個進程更改其他進程使用的文件(因此「無法刪除此文件」錯誤)。 – 2012-07-17 20:58:36

+1

你爲什麼不試試? 'int main() { std :: ifstream ifs(「test.txt」); std :: cin.get(); }'現在嘗試刪除文件,然後在控制檯中輸入任何內容。 – jrok 2012-07-17 21:00:27

回答

3

這取決於一個操作系統。

如果您使用的是Unix-y操作系統,您將繼續讀取/寫入數據,因爲刪除僅僅是對包含目錄和/或inode的更新,因此您不會影響文件的數據。但是,如果磁盤塊所在的文件數據所在的位置可能會被新文件重新使用(也取決於操作系統),那麼您將在讀完數據後基本讀取錯誤的文件數據緩衝區。

如果您在Windows上,正如Seth Carnegie在註釋中正確指出的那樣,如果文件打開以供閱讀,則文件會自動鎖定(並因此不可刪除)。

+3

如果存在訪問該文件的進程,塊將不會被重用。 – 2012-07-17 21:02:05

+0

@KarolyHorvath - 我想知道NFS/AFS/etc是否適用? – DVK 2012-07-17 21:04:02

+0

很好的問題.. NFS不是POSIX compilant,但我的猜測是沒關係。 – 2012-07-17 21:06:11

-1

這是高度系統依賴我猜。由於Linux可能會繼續工作,而Windows會給你一些頭痛的問題。

+3

即使窗戶並沒有那麼糟糕。 – jrok 2012-07-17 20:58:59

+2

愛不請自來的微軟抨擊無知的黑客。 – 2012-07-17 21:30:50

+1

是的,Windows使用時會拒絕刪除文件。 – 2012-07-17 21:47:44

相關問題