错误资源文件夹的相对路径自动更改为C#中的绝对路径

时间:2017-03-22 16:03:15

标签: c#

下面的代码用于从我的项目资源文件夹中的文件test.txt中读取行。

string [] test = File.ReadAllLines(@“Resources \ test.txt”);

属性已更改为“内容”和“始终复制”。

当我运行程序时,将路径自动更改为绝对路径: 的 “C:\用户\文档\资源\ test.txt的

程序错误因为找不到路径。

2 个答案:

答案 0 :(得分:0)

哟可以使用

 Path.Combine(AppDomain.CurrentDomain.BaseDirectory , "Resources", "test.txt"

获得路径。

但是对于你的问题:我认为,问题是ReadAllLines,因为它想要将字符串转换为绝对路径。所以问题不应该存在,如果你本地化字符串,甚至像下面这样做:

var path = "" + "Resources\\test.txt";
var test = File.ReadAllLines(path);

我无法测试这个,因为我无法重现你的问题。

答案 1 :(得分:0)

您正在使用该文件的相对路径,该路径依赖于CurrentDirectory有效。这是在执行程序时更改或未设置到所需目录。您可以使用以下代码测试此失败:

string CurrentDirectory = Environment.CurrentDirectory;
Log.Trace($"CurrentDirectory = {CurrentDirectory}");
System.IO.File.ReadAllText(@"Resources\test.txt");
Environment.CurrentDirectory = @"C:\Tools";
// changing the current directory will now cause the next command to fail
System.IO.File.ReadAllText(@"Resources\test.txt");

您不应该依赖正确设置的CurrentDirectory路径。获取当前正在运行的可执行文件的目录,如下所示:

string ExePath = new System.IO.FileInfo(System.Reflection.Assembly.GetExecutingAssembly().Location)
                .Directory.FullName;
string FullPath = System.IO.Path.Combine(ExePath, "Resources", "test.txt");
System.IO.File.ReadAllText(FullPath);