2015-06-01 205 views
-1

我設計一個新的服務器應用程序,其中包括解析輸入到控制檯窗口中的子程序,例如爲什麼文件被覆蓋?

LogAlways("--- CPU detection ---") 

將被寫成:

[net 21:8:38.939] --- CPU detection --- 

這是子程序:

Public Sub LogAlways(ByVal input As String) 
    Dim dm As String = "[net " + Date.Now.Hour.ToString + ":" + Date.Now.Minute.ToString + ":" + Date.Now.Second.ToString + "." + Date.Now.Millisecond.ToString + "] " 
    Console.WriteLine(dm + input) 
    Dim fName As String = Application.StartupPath() + "\LogBackups\" + Date.Now.Day.ToString + Date.Now.Month.ToString + "" + Date.Now.Year.ToString + ".log" 
    Dim stWt As New Global.System.IO.StreamWriter(fName) 
    stWt.Write(dm + input) 
    stWt.Close() 
End Sub 

這是有效的,但是隻有我期望輸入的最後一行寫入文件。

爲什麼會發生這種情況,以及如何使它不覆蓋日誌文件? 這是使用Wildfire Server API。

這不是重複的,因爲目的地問題有不同的答案,否則不會回答這個問題。

+0

*的 – cybermonkey

+0

可能重複[如何將文本追加到現有文本文件(HTTP://計算器.COM /問題/ 9141866 /如何對追加文本到一個現有文本文件) –

+0

@RowlandShaw Nope,閱讀目的地問題及其答案。 – cybermonkey

回答

1

出現這種情況作爲的StreamWriter並沒有被告知追加輸出與設定True參數文件的末尾時,Visual Studio,其實是給予它作爲一個版本的StreamWriter的:

enter image description here

爲了正確地聲明它:

Dim stWt As New Global.System.IO.StreamWriter(fName, True) 

或在子程序:

Public Sub LogAlways(ByVal input As String) 
    Dim dm As String = "[net " + Date.Now.Hour.ToString + ":" + Date.Now.Minute.ToString + ":" + Date.Now.Second.ToString + "." + Date.Now.Millisecond.ToString + "] " 
    Console.WriteLine(dm + input) 
    Dim fName As String = Application.StartupPath() + "\LogBackups\" + Date.Now.Day.ToString + Date.Now.Month.ToString + "" + Date.Now.Year.ToString + ".log" 
    Dim stWt As New Global.System.IO.StreamWriter(fName, True) 
    stWt.Write(dm + input) 
    stWt.Close() 
End Sub 

需要以下是Imports

  • System.IO
  • System.Windows.Forms的

現在會正確地寫入到文件的末尾,但然而,需要注意的是,''上的文件每個呼叫都可能引起問題,因此排隊系統可能是bett ER:

  • 所需的日誌輸出被插入到一維數組
  • 一個Timer甩掉這個陣列日誌文件上的每個比如說,五到十秒
  • 這樣做時,該陣列*我做了該一遍又一遍地問同樣的問題新手無盡的蹤跡這個問題被清除