2017-02-20 66 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

“消息”已经是字符串,您不需要转换为字符串。 – imsome1

+2

您的消息也位于'now'DateTime的ToString()中。所以这就是为什么字符'正在被转换为42(秒表示秒),等等...... –

回答

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.

这就是为什么

MM - DD - YYYYHH毫米SS - 每s onali TY最多d一个 E()是 innin

变得

二零一七年二月二十日八时17分42秒 - Per42onaliA17 Up20aAe( )beA.D.inninA.D .:

可以找到自定义日期格式的完整列表here on MSDN

+2

这是最精确和最完整的答案,也解释了不只是发布代码修复的问题。 –

+0

谢谢。这很有道理。我应该自己想清楚了。我很感激帮助。 – MJG

相关问题