You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

添加DateTime.Now到文件名时StreamWriter创建文件失败求助

问题:为文件名添加时间戳后StreamWriter抛出异常

尝试用以下代码给日志文件名添加时间戳:

TextWriter iterationLogger = new StreamWriter($"{DateTime.Now} Iteration log.txt");

执行时抛出异常:The filename, directory name, or volume label syntax is incorrect。

试过多种参数组合(append、encoding、@、$)和格式化方式,比如string.Format("{0} Iteration log.txt", DateTime.Now),问题依然存在。

单独用固定字符串作为文件名时,StreamWriter能正常在程序目录创建文件,但添加DateTime后就无法创建,这是为什么?


原因及解决方案

问题出在DateTime.Now的默认字符串格式包含文件名不允许的特殊字符——Windows系统文件名禁止使用: / \ * ? " < > |这类字符,而默认的DateTime格式(如2024/05/20 14:30:00)里的冒号:就是非法字符,导致系统无法识别该文件名。

解决方法是给DateTime指定不含非法字符的自定义格式,示例代码:

// 用下划线代替冒号,生成格式为"yyyy-MM-dd_HH-mm-ss"的时间戳
string fileName = $"{DateTime.Now:yyyy-MM-dd_HH-mm-ss} Iteration log.txt";
TextWriter iterationLogger = new StreamWriter(fileName);

常用的合法日期时间格式示例:

  • yyyyMMddHHmmss:生成无分隔符格式,如20240520143000
  • yyyy-MM-dd_HH-mm-ss:生成带分隔符格式,如2024-05-20_14-30-00
  • yyyy-MM-dd HH-mm-ss:生成带空格的格式,如2024-05-20 14-30-00(空格为合法字符)

2023年3月16日更新

供后续读者参考:可查阅.NET官方文档中「自定义日期和时间格式字符串」的相关内容,学习如何根据需求定制合法的日期时间格式。


内容的提问来源于stack exchange,提问作者Humble Newbie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 12:38:16