如何按PC当前日期时间格式创建目录?解决C# FormatException报错
异常原因
string.Format 要求格式串内{n}形式的占位符,索引n必须大于等于0、小于传入参数的总个数。
你定义的格式串"{0} on {1} At {2}"包含3个占位符,需要传入3个匹配参数,但你删除textBox1.Text后仅传入date、time2个参数,最高位占位符{2}无对应参数值,因此触发该FormatException。
另外原代码直接用字符串拼接路径存在兼容问题:如果传入的根路径Folder末尾没有带\分隔符,会直接把根路径和文件夹名连为一体,导致目录创建位置错误。
修复方案
固定格式实现(匹配你注释里的示例命名规则)
如果不需要原参考代码里的文本框输入前缀,只需要生成星期 月.日.年 At 时.分 上午/下午格式的文件夹名,调整格式串占位符数量、改用官方路径拼接方法即可,完整代码如下:
using System.IO; private void CreateDir(string Folder) { // 命名示例:Sun 01.12.2014 At 09.13 AM string date = DateTime.Now.ToString("ddd MM.dd.yyyy"); string time = DateTime.Now.ToString("HH.mm tt"); // 占位符数量调整为2个,和传入参数匹配 string folderName = string.Format("{0} At {1}", date, time); // 自动处理路径分隔符,避免拼接错误 string fullDirPath = Path.Combine(Folder, folderName); Directory.CreateDirectory(fullDirPath); }
如果需要保留原格式里的on连接段,直接把固定前缀加到格式串里即可,比如要加固定前缀Backup,对应行改为:
string folderName = string.Format("Backup on {0} At {1}", date, time);
跟随PC系统日期时间格式实现
如果需要完全匹配当前PC的系统默认日期时间格式,直接使用系统内置格式生成即可,注意替换文件名非法字符:
using System.IO; private void CreateDir(string Folder) { // 命名规则完全跟随当前系统区域设置的短日期+长时间格式 // 替换冒号是因为Windows文件夹名不允许包含:字符 string folderName = DateTime.Now.ToString("G").Replace(":", "."); string fullDirPath = Path.Combine(Folder, folderName); Directory.CreateDirectory(fullDirPath); }
内容的提问来源于stack exchange,提问作者Daniel Lip
相关产品推荐
相关产品推荐

