2010-02-26 103 views
2

我目前正在用C++寫一個插件。對於我的功能,我要求API保存一個文件。當文件被寫入時,API給了我一個返回值......或者看起來似乎。問題是,這個返回值返回的太早,以至於我無法確定該文件是否完全寫入。檢查寫入文件是否完成

是否有可能獨立於api檢查文件的寫入完整性?

+1

哪個API? OS API?輸入輸出流? C風格的文件操作? – 2010-02-26 11:32:40

回答

4

這是因爲系統在請求時不會將數據寫入磁盤,但仍會返回。在C中,你可以使用int fflush (FILE *stream),但我不知道你會如何在C++中做到這一點。

+1

當然+1 - 這是答案。刪除了我的垃圾。看到這個頁面的C + + i/o http://www.cs.hmc.edu/~geoff/classes/hmc.cs070.200109/notes/io.html – ChrisF 2010-02-26 11:37:14

+0

嗯,我想我不夠清楚。我有一個應用程序爲我提供了(通過插件API)告訴應用程序它應該保存當前文檔的能力。只要我這樣做,我會得到返回值,雖然它還沒有完成寫入文件。這意味着保存文件的行爲由應用程序完成。在我看來,這是應用程序中的錯誤或誤解。但我必須爲此編寫代碼。我正在考慮檢查文件大小,看它是否停止增長或類似的東西(儘管這很可怕)。我想你可能會有更好的辦法。 – draetsch 2010-02-26 13:35:21

1

即使我們重新讀取文件,'驗證'寫入是否發生,也不是真的,您仍然可以查看內核緩衝區。

0

您可以將原始緩衝區和您寫入的文件比較爲字節,但我認爲最好使用相應的操作系統fflushfclose來操作系統。

0

如上所述,您可以使用fflush()。您可以根據您是使用流類還是描述符來調用sync()/ fsync()。