路径格式是非法的

时间:2014-09-08 06:25:35

标签: c# logfile

我想问一个简单的问题,但我遇到了一个问题。 我想得到程序执行的时间

Console.WriteLine(DateTime.Now);

我想输出.log文件,文件名将有程序执行时间

String path2 = "C:\\temp"+DateTime.Now+".log";
StreamWriter path = File.CreateText(path2);
path.WriteLine(DateTime.Now);

但它告诉我路径格式是非法的。

我想问另一个问题

string a12 = aaa.Element("a12").tostring();
String path2 = "C:\\temp" + a12.ToString + ".log";

但它告诉我“路径格式是非法的”

我该如何解决?

由于

5 个答案:

答案 0 :(得分:2)

因为DateTime.Now默认转换为字符串包含时间信息(例如8:53)。分号在路径名中是非法的。

如果您的日期仅在文件名中,则可以使用:

String path2 = "C:\\temp" + DateTime.Now.ToString("d") + ".log";

(编辑)对于某些文化,这仍然会导致无效值,正如其他人指出的那样,最好使用显式格式化程序:

String path2 = "C:\\temp" + DateTime.Now.ToString("yyyy-MM-dd") + ".log";

答案 1 :(得分:1)

您希望在“”引用的字符串中转义\,并且DateTime.Now的结果中也有不能在路径中的字符。你也需要逃脱/替换它们。

答案 2 :(得分:1)

当您将DateTime.Now放入路径时,您可能会冒险添加不具有路径的字符(例如:分隔符。这就是您收到此错误消息的原因。< / p>

您可以将其替换为.

string path2 = Path.Combine
               ( @"C:\temp\"
               , DateTime.Now.ToString("yyyy-MM-dd.HH24.mm.ss")
               , ".log"
               );

答案 3 :(得分:1)

DateTime.Now可能包含非法字符,具体取决于您的本地系统设置。要获得与安装系统的文化无关的有效且一致的文件名,您应该手动创建日志文件名,例如:

String path2 = "C:\\temp" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".log";

答案 4 :(得分:1)

String path2 = String.Format("C:\\temp{0}.log", DateTime.Now.ToString("yyyyMMdd"));

由于filename不能使用由DateTime.Now.ToString(“d”)创建的“/”,因此会产生问题。