为什么文件被覆盖?

时间:2015-06-01 20:22:43

标签: vb.net stream file-writing wildfire-api

我正在设计一个新的服务器应用程序,其中包含一个子程序,用于将输入分析到控制台窗口,例如

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服务器API。

这不是重复,因为目标问题有不同的答案,否则不会回答这个问题。

1 个答案:

答案 0 :(得分: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的

现在它会正确地写到文件的末尾,但是请注意stWt.Close() 每次调用上的文件可能会导致问题,因此排队系统可能更好:

  • 将所需的日志输出插入到一维数组中
  • Timer将此数组转储到每个日志文件中,比如五到十秒
  • 完成此操作后,阵列将被清除