2014-10-09 47 views
0

我正在使用文件IO操作將我的應用程序的日誌寫入文本文件。只要用戶啓動應用程序,我將記錄詳細信息(如誰啓動,日期時間,機器名稱等)。我現在有點擔心,因爲寫入文件的文本沒有被反映,除非遇到file.Close()。如果我使用file.Close()方法,我不能再進一步寫日誌到文件,因爲它說'不能寫入關閉TextWriter'文本文件寫入不反映更改,除非file.Close()

有沒有什麼辦法來處理這種情況。我知道logutil符合我的要求,但不幸的是我不能使用它。

+1

@downvoter:請用有效的意見downvote,只是downvoting不作SENCE – Chethan 2014-10-09 06:34:43

+1

什麼是'file'變量的類型? – Demarsch 2014-10-09 06:35:12

+1

順便說一下,它不是我downvoting – Demarsch 2014-10-09 06:35:38

回答

6

您需要定期調用Flush以確保內存緩衝區的內容被刷新到文件系統。

查看TextWriter.Flush Method瞭解更多信息。

請注意,此處的刷新很可能只是將TextWriter或文件具有的任何緩衝區的內容轉儲到操作系統具有的單獨緩衝區類型中,因此如果電源熄滅,仍不能保證內容已保存。但是,其他程序將能夠看到文件的內容,因爲操作系統會給它們提供內容,儘管它實際上可能不在磁盤上。

2

您可以使用file.Flush()。它可以叫你需要清除緩存的任何時間,並且流將保持開放:

http://msdn.microsoft.com/de-de/library/system.io.streamwriter.flush(v=vs.110).aspx

編輯:

爲了不鎖文件,你應該寫一後關閉該文件行或使用類似這樣:

File.AppendAllText("log.txt", "log entry" + Environment.NewLine); 
+0

是的,只要我寫我使用flush方法,但我無法打開文件,它會引發錯誤「進程無法訪問文件,因爲它正在被另一個進程使用」。但是在執行file.Close()之後,我能夠看到我的文件內容。下面是代碼if(file!= null)file.WriteLine(message); file.Flush(); – Chethan 2014-10-09 06:43:42

+0

也,我試過file.AutoFlush = true。但沒有工作 – Chethan 2014-10-09 06:44:53

+1

然後嘗試File.AppendAllText – Shadowshine 2014-10-09 06:55:23

相關問題