应用程序将我的本地路径作为错误发送到客户端的计算机上

aii*_*iwa 1 c# sharpdevelop

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

string query = File.ReadAllText(@"files\myfile.txt");
Run Code Online (Sandbox Code Playgroud)

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

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

需要帮助:

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

感谢帮助.

Avn*_*tan 6

您的错误消息中有两种不同的路径在播放.

错误的本地路径

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

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

搜索此路径是因为File.ReadAllText,当给定相对路径名称时,将在当前目录下搜索,该目录不一定是安装应用程序的目录 - 可以通过调用Directory.SetCurrentDirectory第三方组件甚至使用Open 来更改它文件对话框.

您需要做的是不使用相对路径,而是明确指定文件的位置.你可以通过获取当前正在执行的EXE路径并附files\myfiles.txt加到它来实现.您可以使用获取当前的EXE路径Assembly.GetExecutingAssembly().Location.

开发者路径

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