我已经创建了一个WFA应用程序,我决定在我的PC上测试它,所以我为它安装了一个安装程序。我的程序与同一文件夹中的.txt文件协作,因此在我的代码中,我通过AppDomain.CurrentDomain.BaseDirectory获取其执行路径,并添加“myTxt.txt”以获取txt路径。然后我通过File.ReadAllLines()读取它的内容到我的字符串数组。
string path = AppDomain.CurrentDomain.BaseDirectory;
string text = String.Concat(path,"mytxt.txt");
string[] content = File.ReadAllLines("mytxt.txt") // relative path
这就是问题所在。每当我的程序在“程序文件”中设置时,我都可以打开.txt,但没有内容加载到数组中。否则,当它在程序文件(x86)中设置时,一切都很好。为什么会这样?我该如何解决这个问题?
答案 0 :(得分:0)
File.ReadAllLines("test.txt");
Directory.SetCurrentDirectory(@"c:\temp");
File.ReadAllLines("test.txt");
引起注意的另一点是AppDomain.BaseDirectory永远不会改变,而CurrentDirectory可以(并且可能会)多次改变。
因此,如果您知道应用程序路径,并且mytxt.txt文件位于应用程序路径的固定相对路径中,则可以通过更正作为ReadAllLines函数的参数传递的相对路径来修复代码。否则,您可以使用Path.Combine构建完整路径(如上面的ohiodoug所示)并使用它而不是相对路径。我推荐以后的选项。
您可以在下面找到与您的问题相关的帖子和文档的一些链接:
Should I use AppDomain.CurrentDomain.BaseDirectory or System.Environment.CurrentDirectory?
Why AppDomain.CurrentDomain.BaseDirectory not contains “bin” in asp.net app?