从Visual Studio运行C#项目时出现File not found exception的解决办法
解决Visual Studio运行C#程序时找不到同目录文件的问题
这个坑我之前也踩过!核心原因就是Visual Studio默认的工作目录和你手动运行exe时的目录不一样——当你从VS启动程序时,它默认把项目根目录(就是放.csproj文件的那个文件夹)作为当前工作目录,而非exe所在的bin/x64/Debug或Release目录,所以直接用相对路径input.txt自然找不到文件。
下面给你三种靠谱的解决办法,按需选就行:
方法1:修改Visual Studio的调试工作目录
这是调试时最直接的方案,让VS运行程序时自动切换到exe所在的输出目录:
- 右键你的项目 → 选择「属性」
- 切换到「调试」标签页
- 在「工作目录」输入框里,把默认值改成
$(TargetDir)(这个宏会自动对应当前配置的输出目录,Debug/Release都能适配) - 保存设置后再运行,就能正常读取
input.txt了
方法2:在代码中动态获取exe所在目录(生产环境推荐)
如果想让程序不管在哪运行都能精准找到同目录文件,最好在代码里通过程序集信息获取正确路径,别依赖相对路径。示例代码如下:
using System.IO; using System.Reflection; // 获取当前可执行文件的所在目录 // 方式A:.NET Core/.NET 5+推荐用AppContext string exeDirectory = AppContext.BaseDirectory; // 方式B:兼容所有.NET版本,用Assembly // string exeDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); // 拼接input.txt的完整路径 string inputFilePath = Path.Combine(exeDirectory, "input.txt"); // 之后用inputFilePath读取文件就没问题了
这种方法的优势是通用性拉满——不管是VS调试、手动双击exe,还是把程序部署到其他地方,都能准确找到目标文件。
方法3:设置文件自动复制到输出目录
先确保input.txt会被自动同步到exe所在的输出目录,避免手动拷贝的麻烦:
- 在解决方案资源管理器里右键
input.txt→ 选择「属性」 - 在「复制到输出目录」下拉菜单中,选「如果较新则复制」或「始终复制」
- 这样每次编译时,文件都会自动同步到
bin/x64/Debug或Release目录
不过要注意:如果只改这个但没调整工作目录,从VS运行时还是得用bin/x64/Debug/input.txt这种路径才能访问,所以更建议搭配方法1或方法2一起用。
内容的提问来源于stack exchange,提问作者andreas
相关产品推荐
相关产品推荐

