我是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文件夹路径)
需要帮助:
myfile.txt
,而无需触及 .exe (无需再次构建)@"files\myfile.txt"
)。感谢帮助。
答案 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"));