Создание и добавление текста в txt файл в 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
Ответы
Ответ 1
Попробуйте следующее:
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
Ответ 2
Не проверяйте File.Exists(). На самом деле все это слишком сложно. Это должно делать то, что вам нужно:
Dim strFile As String = String.Format("C:\ErrorLog_{0}.txt", DateTime.Today.ToString("dd-MMM-yyyy"))
File.AppendAllText(strFile, String.Format("Error Message in Occured at-- {0}{1}", DateTime.Now, Environment.NewLine))
Выделили все до двух строк кода:)
Ответ 3
Это должно работать для вас, не меняя программную логику (не выводя "Ошибка запуска" в верхней части каждого файла), как и другие ответы:
Не забудьте добавить код обработки исключений.
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
Ответ 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
Вы не закрыли файл после его создания, поэтому, когда вы пишете его, он используется самостоятельно. Метод 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.
Ответ 6
Попробуйте так:
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
Ответ 7
Пока я понимаю, что это более старый поток, я заметил, что блок 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