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

时间:2009-10-23 14:01:00

标签: 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

7 个答案:

答案 0 :(得分:23)

试试这个:

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

答案 1 :(得分:17)

不要像这样检查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}")

将整个内容归结为两行代码:)

答案 2 :(得分:7)

这应该适合你而不改变程序逻辑(通过不在每个文件的顶部输出“Start error”),就像其他答案那样:) 请记住添加异常处理代码。

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

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

注意:当您捕获异常时,不要捕获基类Exception,只捕获那些相关的异常。在这种情况下,它将是从IOException继承的那些。

答案 4 :(得分:4)

为什么不使用以下简单调用(添加了任何异常处理)?

File.AppendAllText(strFile, "Start Error Log for today")


编辑回答
这应该完全回答这个问题!

If File.Exists(strFile)
  File.AppendAllText(strFile, String.Format("Error Message in  Occured at-- {0:dd-MMM-yyyy}{1}", Date.Today, Environment.NewLine))
Else
  File.AppendAllText(strFile, "Start Error Log for today{0}Error Message in  Occured at-- {1:dd-MMM-yyyy}{0}", Environment.NewLine, Date.Today)
End If

答案 5 :(得分:2)

虽然我意识到这是一个较老的线程,但我注意到上面的if块不合适使用:

以下更正:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim filePath As String =
      String.Format("C:\ErrorLog_{0}.txt", DateTime.Today.ToString("dd-MMM-yyyy"))
    Using writer As New StreamWriter(filePath, True)
        If File.Exists(filePath) Then
            writer.WriteLine("Error Message in  Occured at-- " & DateTime.Now)
        Else
            writer.WriteLine("Start Error Log for today")
        End If
    End Using
End Sub

答案 6 :(得分:1)

以这种方式尝试:

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

if File.Exists(filePath) then

Using writer As New StreamWriter(filePath, True)
writer.WriteLine("Error Message in  Occured at-- " & DateTime.Now)

Else
writer.WriteLine("Start Error Log for today")
End Using

end if