使用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)
把整个事情搞得两行代码:)
这应该适合你而不改变程序逻辑(通过不输出每个文件顶部的"启动错误"),像其他答案一样:)记住添加异常处理代码.
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)
创建文件后您没有关闭文件,因此当您对其进行写入时,该文件就由您自己使用。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继承的。
| 归档时间: |
|
| 查看次数: |
155415 次 |
| 最近记录: |