添加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:生成无分隔符格式,如20240520143000yyyy-MM-dd_HH-mm-ss:生成带分隔符格式,如2024-05-20_14-30-00yyyy-MM-dd HH-mm-ss:生成带空格的格式,如2024-05-20 14-30-00(空格为合法字符)
2023年3月16日更新
供后续读者参考:可查阅.NET官方文档中「自定义日期和时间格式字符串」的相关内容,学习如何根据需求定制合法的日期时间格式。
内容的提问来源于stack exchange,提问作者Humble Newbie
相关产品推荐
相关产品推荐

