C# 使用带~的相对路径写入文件触发DirectoryNotFoundException错误如何解决
问题原因
~波浪号仅在ASP.NET等Web框架的路径解析逻辑中具备「映射到站点根目录」的特殊语义,普通.NET IO类(比如StreamWriter、File等)不会对~做特殊处理,会直接将其作为普通目录名拼接进路径,所以最终生成的路径会包含~目录,该目录实际不存在就抛出DirectoryNotFoundException。- 另外,就算路径拼接正确,如果
data/orders层级的父目录没有提前创建,StreamWriter也不会自动生成缺失的父目录,同样会抛出该异常。
修正方案
1. 正确获取程序运行根目录
通过AppDomain.CurrentDomain.BaseDirectory获取当前程序集的执行目录,也就是你场景中的bin/Debug目录,避免手动写相对路径出现偏差。
2. 使用Path.Combine拼接路径
不要手动使用/或\拼接路径,调用.NET内置的Path.Combine方法自动适配不同系统的路径分隔符,避免格式错误。
3. 提前创建缺失的父目录
写入文件前先判断目标目录是否存在,不存在就调用Directory.CreateDirectory创建,该方法不会覆盖已存在的目录,可以放心调用。
完整修正代码
// 获取程序运行根目录(bin/Debug) string basePath = AppDomain.CurrentDomain.BaseDirectory; // 拼接订单文件存放目录 string orderDir = Path.Combine(basePath, "data", "orders"); // 拼接最终文件路径 string filePath = Path.Combine(orderDir, $"{sdat}.txt"); // 目录不存在则自动创建 if (!Directory.Exists(orderDir)) { Directory.CreateDirectory(orderDir); } // 写入文件 using (StreamWriter writer = new StreamWriter(filePath)) { writer.WriteLine(lines[0]); writer.WriteLine(lines[1]); writer.WriteLine(lines[2]); }
内容的提问来源于stack exchange,提问作者Gergő Szabó
相关产品推荐
相关产品推荐

