2017-03-09 43 views
1

我爲我的雲計算實現了一個自定義的寫入接口。 到目前爲止,我的問題是,我完成將文件複製到我的作家並關閉了作家之後,作家仍然有幾個寫操作(通常可能是4寫入每個約4096字節)。最後一次寫入通常小於4096.Golang程序在寫入完成前關閉文件

這還沒有發生,但我知道它的概率是1/4096,最後一次寫入是4096字節,我的程序不會終止。

我正在使用這個壓縮程序和io.EOF不是有效的,因爲每個寫入塊都有一個,同時檢查寫入程序是否關閉來過早,而仍有一些寫入操作。

處理這種情況的最佳方法是什麼? (),Flush()和Close()方法。現在一切都很好,如果我使用延遲關閉(),但我仍然得到了同樣的問題,如果我手動調用Close()在末端

+1

我不明白,你怎麼不知道你是否寫過數據呢?如果你在每個塊上都有EOF,那麼你做錯了什麼。 – JimB

+0

所以我打開一個文件,複製一些字節並關閉它。這部分工作。底層的「作家」通常需要時間來趕上 - 我從寫作塊來看。所以我得到一個文件關閉的情況,但底層作家幾乎完成了追趕。 – Godfrey

+0

正常的編寫器會在Close上阻塞,直到它完成所有緩衝寫入。我不知道你的底層Writer是什麼,但它聽起來不像它能正常工作。 – JimB

回答

0

因爲您完全控制了作家,您可以使用waitgroup 在您的main中等待所有的程序完成。

0

問題通過實施更強大的Close()功能解決。我還使用defer Close()來確保Golang在內部處理所有Goroutines。

相關問題