为什么文件被覆盖?
Why is the file being overwritten?
我正在设计一个新的服务器应用程序,其中包括一个将输入解析到控制台的子例程 window,例如
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.
这不是重复的,因为目标问题有不同的答案,否则不会回答这个问题。
这是因为 StreamWriter 没有被告知 将输出追加到文件末尾,参数设置为 True
、Visual Studio实际上将其作为 StreamWriter 的一个版本提供:
要正确声明它:
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()
'ing 文件可能会导致问题,因此排队系统可能更好:
- 期望的日志输出被插入到一维数组中
- A
Timer
每隔五到十秒将此数组转储到日志文件
- 完成后,数组被清除
我正在设计一个新的服务器应用程序,其中包括一个将输入解析到控制台的子例程 window,例如
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.
这不是重复的,因为目标问题有不同的答案,否则不会回答这个问题。
这是因为 StreamWriter 没有被告知 将输出追加到文件末尾,参数设置为 True
、Visual Studio实际上将其作为 StreamWriter 的一个版本提供:
要正确声明它:
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()
'ing 文件可能会导致问题,因此排队系统可能更好:
- 期望的日志输出被插入到一维数组中
- A
Timer
每隔五到十秒将此数组转储到日志文件 - 完成后,数组被清除