繁体   English   中英

应用程序将我的本地路径抛出为客户端计算机上的错误

[英]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(这是我的本地路径,应改为显示客户端的文件夹路径)

需要帮助:

  1. 我应该如何让exe选择客户端的路径,而不是我的本地路径?
  2. 这是添加文件的正确方法。 请注意,我之所以保持这种方式,是因为我想让客户端可以根据需要灵活地更改myfile.txt ,而无需触碰.exe (无需再次构建)
  3. 这是找到文件( @"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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM