You need to enable JavaScript to run this app. C# 使用带~的相对路径写入文件触发DirectoryNotFoundException错误如何解决
优惠活动
大模型
产品
解决方案
定价
更多

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ó

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 07:54:03