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

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 任务调度程序触发它时,他们得到的错误是:

System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Windows\system\files\myfile.txt'... at extractor.Program.query() in d:\workspace\test\Program.cs:line 81 (this is my local path, shoud show client's folder path instead)

需要帮助:

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

感谢帮助。

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

本地路径错误

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

C:\Windows\system\files\myfile.txt

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

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

获取当前 EXE 路径

开发者路径

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

像这样使用

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