Создание и добавление текста в txt файл в VB.NET

Когда необходимо поддерживать долговременную персистентность через сериализацию, тогда Вы почти всегда должны использовать пользовательский код для поддержки этого и должны явно установить эти serialVersionUID, поскольку иначе более старая сериализированная версия не будет de-serializable более новым кодом.

Те сценарии уже требуют большого ухода для получения всех корректных случаев, когда класс изменяется, таким образом, serialVersionUID является наименьшим количеством проблем.

, Если Вам не нужно это (т.е. Вы всегда сериализируете и десериализовываете с той же версией класса), тогда можно безопасно пропустить явное объявление, поскольку вычисленное значение удостоверится, что правильная версия используется.

29
задан Peter Mortensen 13 May 2016 в 11:25
поделиться

5 ответов

Попробуйте следующее:

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
27
ответ дан 28 November 2019 в 01:13
поделиться

Это должно работать для вас без изменения логики программы (не выводя «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
8
ответ дан 28 November 2019 в 01:13
поделиться

Не проверяйте 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}")

Получил все до двух строк кода :)

19
ответ дан 28 November 2019 в 01:13
поделиться

Вы не закрыли файл после его создания, поэтому, когда вы пишете в него, он используется вами. Метод 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.

5
ответ дан 28 November 2019 в 01:13
поделиться

Почему бы просто не использовать следующий простой вызов (с любой добавленной обработкой исключений)?

File.AppendAllText (strFile, «Начать журнал ошибок на сегодня»)


РЕДАКТИРОВАТЬ ОТВЕТ
Это должно полностью ответить на вопрос!

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
4
ответ дан 28 November 2019 в 01:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: