下面的代码用于从我的项目资源文件夹中的文件test.txt中读取行。
string [] test = File.ReadAllLines(@“Resources \ test.txt”);
属性已更改为“内容”和“始终复制”。
当我运行程序时,将路径自动更改为绝对路径: 的 “C:\用户\文档\资源\ test.txt的
程序错误因为找不到路径。
答案 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);