我有一个 C# 程序,它会从相对路径
./report/report1.rdlc
读取文件,但是有时由于未知原因,它从完全不同的位置找到该文件 C:\Windows\system32\report\report1.rdlc
但该文件实际上位于 C:\Program Files (x86)\Application1\report\report1.rdlc
中,并且程序在里面C:\Program Files (x86)\Application1\
。相对路径不从工作目录开始有什么原因吗?
它确实从工作目录开始。但是,您不应该使用工作目录,因为如果执行特定的 IO 任务(例如有时“打开文件”对话框或(显然)“Directory.SetCurrentDirectory
”方法),工作目录可能会有所不同。相反,您应该使用
AppDomain.CurrentDomain.BaseDirectory
属性来获取程序集文件所在的路径。你可以这样使用:var relativePath = Path.Combine ("report", "report1.rdlc");
var baseDirectory = AppDomain.CurrentDomain.BaseDirectory;
var absolutePath = Path.Combine (baseDirectory, relativePath);
现在您应该使用
absolutePath
来访问该文件。