.NET 5环境下C#如何使用相对路径读取源码目录下的本地文件
解决方法
问题根因
.NET程序运行时默认将exe所在的输出目录作为工作目录,你放在源码目录的Sample.txt不会自动同步到输出目录,因此直接写相对路径会找不到文件。
可选解决方案
方案一:配置文件自动同步到输出目录(推荐,适配开发+发布场景)
该方案不需要修改程序运行逻辑,发布后也能正常使用,操作步骤如下:
- 在Visual Studio解决方案资源管理器中找到源码目录下的
Sample.txt,右键点击选择「属性」 - 在属性面板中找到「生成操作」,设置为「内容」
- 找到「复制到输出目录」,设置为「如果较新则复制」
配置完成后每次生成项目,最新的Sample.txt会自动复制到exe所在的输出目录,你原有代码不需要任何修改即可正常运行。
如果想要避免工作目录被篡改时找不到文件,可以使用更稳妥的路径拼接写法,替换原有StreamReader初始化逻辑即可:
// 获取当前程序exe所在目录 var exePath = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location); // 拼接得到文件的绝对路径,兼容性更强 var targetFilePath = Path.Combine(exePath, "Sample.txt"); StreamReader sr = new StreamReader(targetFilePath);
方案二:修改调试阶段工作目录为源码目录(仅适合本地开发用)
如果你确实希望文件只存放在源码目录,不需要复制到输出目录,只需要修改VS调试的工作目录配置即可:
- 右键项目名称选择「属性」,切换到「调试」选项卡
- 找到「工作目录」配置项,将默认的输出目录路径修改为你的源码根目录(即
Sample.txt存放的目录)
配置完成后调试运行时,Directory.GetCurrentDirectory()会返回源码目录,直接写文件名相对路径即可读取到文件。
注意:该配置仅在本地VS调试时生效,程序打包发布后运行仍会默认以exe所在目录为工作目录,不适用于生产发布场景。
内容的提问来源于stack exchange,提问作者Callum
相关产品推荐
相关产品推荐

