使用相对路径无法找到文本文件,仅绝对路径生效的问题咨询
问题描述
我在工作文件夹中创建了文本文件Info.txt,但代码里用相对路径无法识别该文件,只有绝对路径能成功找到,相关代码如下:
string fileName = "Info.txt"; if (File.Exists(fileName )) { Console.WriteLine("File Exists"); Console.WriteLine("File was created " + File.GetCreationTime(fileName)); Console.WriteLine("File was last written to " + File.GetLastWriteTime(fileName)); } else { Console.WriteLine("File does not exist."); }
原因
核心问题是程序运行时的当前工作目录,和你创建文件的工作文件夹不是同一个。相对路径的解析是基于程序启动时的当前目录,而非你写代码时的项目文件夹。比如在Visual Studio这类IDE里运行程序,默认当前目录是项目的bin/Debug或bin/Release目录,不是你放Info.txt的项目根目录,自然找不到文件。
解决办法
- 直接用绝对路径:把文件名改成完整的绝对路径,比如
string fileName = @"C:\你的工作文件夹路径\Info.txt";。缺点是换环境就得改路径,不够灵活。 - 拼接项目根目录:通过程序集信息拿到项目根目录,再和文件名拼接,保证路径正确:
using System.Reflection; string assemblyDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); // 根据实际项目结构调整../的数量,确保回到根目录 string projectRoot = Path.GetFullPath(Path.Combine(assemblyDir, @"..\..\..")); string fileName = Path.Combine(projectRoot, "Info.txt"); - 修改IDE的工作目录:以Visual Studio为例,右键项目→属性→调试,把“工作目录”设为项目根目录(填
$(ProjectDir)就行),这样程序运行时的当前目录就和你放文件的目录一致,相对路径就能正常用了。 - 把文件复制到输出目录:右键
Info.txt→属性,把“复制到输出目录”设为“如果较新则复制”或“始终复制”,这样文件会自动同步到bin/Debug或bin/Release,相对路径就能找到它。
内容的提问来源于stack exchange,提问作者Muzzammil Mahomed
相关产品推荐
相关产品推荐

