使用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
答案 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