2017-02-20 15 views
1

У меня есть библиотека классов, написанная на C#, которую я использую для записи ошибок и другой информации в текстовые файлы или файлы журналов. Проблема в том, что он меняет текст, когда он записывает его в файл. Он вызывается приложением vb.net.Почему StreamWriter изменяет текст, который он записывает в файл?

Текст, который должен быть написан:02-20-2017 08:17:42 - Personality Update() beginning:

Текст, который фактически написано:02-20-2017 08:17:42 - Per42onaliA17 Up20aAe() beA.D.inninA.D.:

Ниже приведен код, который вызывает метод выписывать строку.

errHandler.AddLineToLogFile(Me.MasterLogFileName, "Personality Update() beginning:") 

Ниже приведен метод, который вызывается.

public void AddLineToLogFile(string logFile, string message, bool replaceExistingFile = false) 
    { 
     DateTime now = DateTime.Now; 
     using (StreamWriter writer = new StreamWriter(logFile, !replaceExistingFile)) 
     { 
      writer.WriteLine(now.ToString("MM-dd-yyyy HH:mm:ss - " + message)); 
      writer.WriteLine(" "); 
     } 
    } 

Может ли кто-нибудь помочь мне с этой проблемой?

+3

Почему вы делаете message.ToString() для строковой переменной? – Rumplin

+0

«message» - это уже строка, которую вам не нужно преобразовывать в строку. – imsome1

+2

Ваше сообщение также находится в ToString() из 'now' DateTime. поэтому поэтому символ «преобразуется» в 42 (s стоит в секундах) и т. д. –

ответ

4

Вы конвертируете now в строку, а другой текст находится внутри этого метода ToString. Отделите эти два, и все должно быть в порядке.

writer.WriteLine(now.ToString("MM-dd-yyyy HH:mm:ss") + " - " + message); 
2

Попробуйте

DateTime now = DateTime.Now; 
using (StreamWriter writer = new StreamWriter(logFile, !replaceExistingFile)) 
{ 
    writer.WriteLine(now.ToString("MM-dd-yyyy HH:mm:ss") + "- " + message); 
    writer.WriteLine(" "); 
} 
9

Вы передаете сообщение как часть формата даты. Части, соответствующие известному формату, заменяются значениями от now.Добавить сообщение после форматирования DateTime:

now.ToString("MM-dd-yyyy HH:mm:ss") + " - " + message 
  • s = Второй (42)
  • t = Первый символ в AM/PM целеуказателем (A)
  • y = В год , от 0 до 99 (17)
  • d = День (20)
  • g = период или эпоха (A.D.)

Вот почему

ММ - дд - ггггНН: мм: сс - Пер s onali ти До дт е() быть г Иннин г:

становится

02-20-2017 08:17:42 - Per42onaliA17 Up20aAe () beA.D.inninA.D .:

Полный список пользовательских форматов дат можно найти here on MSDN

+2

Это самый точный и полный ответ, также объясняющий проблему не только отправкой исправления кода. –

+0

Спасибо. Это имеет смысл. Я должен был понять это сам. Я ценю помощь. – MJG

Смежные вопросы