在VB.NET中创建文本并将其附加到txt文件

aca*_*dia 29 vb.net

使用VB.NET,我试图创建一个文本文件,如果它不存在或附加文本,如果存在.

出于某种原因,虽然它正在创建文本文件,但我收到一条错误,说进程无法访问文件.

当我运行程序时它正在编写文本,但是如何让它在新行上写?

Dim strFile As String = "C:\ErrorLog_" & DateTime.Today.ToString("dd-MMM-yyyy") & ".txt"

Dim sw As StreamWriter
Dim fs As FileStream = Nothing

If (Not File.Exists(strFile)) Then
    Try
        fs = File.Create(strFile)
        sw = File.AppendText(strFile)
        sw.WriteLine("Start Error Log for today")

    Catch ex As Exception
        MsgBox("Error Creating Log File")
    End Try
Else
    sw = File.AppendText(strFile)
    sw.WriteLine("Error Message in  Occured at-- " & DateTime.Now)

    sw.Close()
End If
Run Code Online (Sandbox Code Playgroud)

Rub*_*ias 27

试试这个:

Dim strFile As String = "yourfile.txt"
Dim fileExists As Boolean = File.Exists(strFile)
Using sw As New StreamWriter(File.Open(strFile, FileMode.OpenOrCreate))
    sw.WriteLine( _
        IIf(fileExists, _
            "Error Message in  Occured at-- " & DateTime.Now, _
            "Start Error Log for today"))
End Using
Run Code Online (Sandbox Code Playgroud)


Joe*_*orn 19

不要像这样检查File.Exists().事实上,整件事情过于复杂.这应该做你需要的:

Dim strFile As String = $@"C:\ErrorLog_{DateTime.Today:dd-MMM-yyyy}.txt"
File.AppendAllText(strFile, $"Error Message in  Occured at-- {DateTime.Now}{Environment.NewLine}")
Run Code Online (Sandbox Code Playgroud)

把整个事情搞得两行代码:)

  • +1,有我错过的换行!你的第一行应该是`Dim strFile As String = String.Format("C:\ ErrorLog_ {0:dd-MMM-yyyy} .txt",DateTime.Today)`. (2认同)

Esp*_*spo 8

这应该适合你而不改变程序逻辑(通过不输出每个文件顶部的"启动错误"),像其他答案一样:)记住添加异常处理代码.

Dim filePath As String = String.Format("C:\ErrorLog_{0}.txt", DateTime.Today.ToString("dd-MMM-yyyy"))

Dim fileExists As Boolean = File.Exists(filePath)

Using writer As New StreamWriter(filePath, True)
    If Not fileExists Then
        writer.WriteLine("Start Error Log for today")
    End If
    writer.WriteLine("Error Message in  Occured at-- " & DateTime.Now)
End Using
Run Code Online (Sandbox Code Playgroud)


Guf*_*ffa 5

创建文件后您没有关闭文件,因此当您对其进行写入时,该文件就由您自己使用。Create方法将打开文件并返回FileStream对象。您可以使用FileStream写入文件,也可以在写入之前将其关闭。我建议您在这种情况下改用CreateText方法,因为它会返回StreamWriter。

您还忘记了在文件不存在的情况下关闭StreamWriter,因此当您下次尝试写入该文件时,它很可能仍被锁定。而且您忘记了将错误消息写入文件(如果不存在)。

Dim strFile As String = "C:\ErrorLog_" & DateTime.Today.ToString("dd-MMM-yyyy") & ".txt"
Dim sw As StreamWriter
Try
   If (Not File.Exists(strFile)) Then
      sw = File.CreateText(strFile)
      sw.WriteLine("Start Error Log for today")
   Else
      sw = File.AppendText(strFile)
   End If
   sw.WriteLine("Error Message in  Occured at-- " & DateTime.Now)
   sw.Close()
Catch ex As IOException
   MsgBox("Error writing to log file.")
End Try
Run Code Online (Sandbox Code Playgroud)

注意:捕获异常时,请勿捕获基类Exception,而仅捕获相关的异常。在这种情况下,它将是从IOException继承的。