应用程序将我的本地路径作为错误丢弃在客户端的计算机上

时间:2016-05-18 04:20:13

标签: c# sharpdevelop

我是C#的新手。创建了一个C#应用程序,它从文件中读取并进行一些处理。我手动将文件放在myProject/bin/Debug/files/下(注意:手动复制粘贴的文件,不确定我是否需要通过应用程序以任何方式导入 - 使用SharpDevelop IDE)。我的代码通过

读取文件
string query = File.ReadAllText(@"files\myfile.txt");

在我构建并将其传递给客户端并且单击myproject.exe后它正常工作后,它可以找到该文件。但是当他们使用Windows任务调度程序触发它时,他们得到的错误是:

  

System.IO.DirectoryNotFoundException:找不到路径的一部分' C:\ Windows \ system \ files \ myfile.txt' ...在d中的extractor.Program.query()中: \ workspace \ test \ Program.cs:第81行(这是我的本地路径,改为显示客户端&#f文件夹路径)

需要帮助:

  1. 我应该如何选择exe客户端的路径,而不是我的本地路径?
  2. 这是添加文件的正确方法吗?请注意,我保留了这种方式,因为我希望客户可以根据需要灵活地更改myfile.txt,而无需触及 .exe (无需再次构建)
  3. 这是找到文件的正确方法(@"files\myfile.txt")。
  4. 感谢帮助。

2 个答案:

答案 0 :(得分:6)

您的错误消息中有两种不同的路径。

错误的本地路径

第一个是应用程序尝试查找文件的路径。这个,你的错误是

  

C:\ WINDOWS \ SYSTEM \文件\ myfile.txt的

搜索此路径是因为import re fileData = [] #data from file.txt parsed through regex with open("file.txt") as f: for line in f: regExp = re.match(r"(\d+)\s+(\d+)\s(\d+)", line) #extracts data from row in file fileData.append((int(regExp.group(1)), int(regExp.group(2)), int(regExp.group(3)))) #make 2-d list of data maxIndex = max(fileData, key=lambda x: x[0])[0] #biggest index in the list (5 in this case) finaList = [] #the list where your output will be stored for i in range(1, maxIndex+1): #you example output showed a 1-indexed dict thisDict = {} #start with empty dict for item in fileData: if item[0] == i: thisDict[item[1]] = item[2] #for every item with same index as this dict, add new key-value to dict finaList.append(thisDict) #add this dict to output list print(finaList) 在给定相对路径名时会在当前目录下搜索,该目录不一定是安装应用程序的目录 - 可以通过调用{{ 3}},第三方组件,甚至使用“打开文件”对话框。

您需要做的是不使用相对路径,而是明确指定文件的位置。您可以通过获取当前正在执行的EXE路径并将File.ReadAllText附加到其中来实现。 您可以使用files\myfiles.txt获取当前的EXE路径。

开发者路径

您的错误消息似乎指向开发人员计算机上的路径,但这实际上并不是.NET查找hte文件的位置,而是原始C#文件的位置,其中引发了异常< / em>的。这是因为您包含了包含额外调试信息的PDB文件 - 此调试信息包含开发工作空间路径,因此您可以在代码中找到错误。

答案 1 :(得分:2)

像这样使用

string path = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location);
String query = File.ReadAllText(Path.Combine(path, "files\\Test.txt"));