[英]Application throwing my local path as an error on client's machine
我是C#的新手。 创建了一个C#应用程序,该程序从文件读取并进行一些处理。 我已经将文件手动放在myProject/bin/Debug/files/
(注意:手动复制粘贴的文件,不确定是否需要通过应用程序以任何方式导入-使用SharpDevelop IDE)。 我的代码通过读取文件
string query = File.ReadAllText(@"files\myfile.txt");
在我将其构建并传递给客户端之后,当他们单击myproject.exe
,它可以正常工作,它可以找到该文件。 但是当他们使用Windows Task Scheduler触发它时,他们得到的错误是:
System.IO.DirectoryNotFoundException:在d:\\ workspace \\ test \\ Program.cs中的extractor.Program.query()处找不到路径'C:\\ Windows \\ system \\ files \\ myfile.txt'...的一部分:line 81(这是我的本地路径,应改为显示客户端的文件夹路径)
需要帮助:
myfile.txt
,而无需触碰.exe (无需再次构建) @"files\\myfile.txt"
)的正确方法吗? 感谢帮助。
错误消息中有两条不同的路径在起作用。
错误的本地路径
第一个是应用程序尝试查找文件的路径。 这是你的错误是
C:\\ Windows \\ system \\ files \\ myfile.txt
之所以要搜索此路径,是因为File.ReadAllText
(在获得相对路径名时)将在当前目录下搜索,该目录不一定是您的应用程序的安装目录-可以通过调用Directory.SetCurrentDirectory
(第三方)进行更改组件,甚至使用“打开文件”对话框。
您不需要做的是使用相对路径,而是明确指定文件的位置。 您可以通过采用当前正在执行的EXE的路径并向其附加files\\myfiles.txt
来实现。 您可以使用Assembly.GetExecutingAssembly().Location
获取当前EXE路径。
开发者之路
您的错误消息似乎指向开发人员计算机上的路径,但这实际上不是.NET在其中查找hte文件的位置 ,而是原始C#文件在其中引发异常的位置 。 这是因为您包括了包含额外调试信息的PDB文件-该调试信息包含dev工作区路径,因此您可以在代码中找到错误。
这样使用
string path = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location);
String query = File.ReadAllText(Path.Combine(path, "files\\Test.txt"));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.