Подтвердить что ты не робот

Создание и добавление текста в 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
4b9b3361

Ответ 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