应用程序将我的本地路径作为客户端机器上的错误抛出
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)
需要帮助:
- 我应该如何让 exe 选择客户端的路径,而不是我的本地路径?
- 这是添加文件的正确方法吗?请注意,我保持这种方式是因为我想让客户根据需要灵活地更改
myfile.txt
,而无需触及 .exe(无需再次构建)
- 这是定位文件的正确方法吗(
@"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"));
我是 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)
需要帮助:
- 我应该如何让 exe 选择客户端的路径,而不是我的本地路径?
- 这是添加文件的正确方法吗?请注意,我保持这种方式是因为我想让客户根据需要灵活地更改
myfile.txt
,而无需触及 .exe(无需再次构建) - 这是定位文件的正确方法吗(
@"files\myfile.txt"
)。
感谢帮助。
您的错误消息中有两种不同的路径。
本地路径错误
第一个是应用程序尝试查找文件的路径。这个,在你的错误中是
C:\Windows\system\files\myfile.txt
搜索此路径是因为 File.ReadAllText
,当给定相对路径名时,将在当前目录下搜索,该目录不一定是安装您的应用程序的目录 - 它可以通过调用更改Directory.SetCurrentDirectory
、第 3 方组件甚至使用打开文件对话框。
您需要做的不是使用相对路径,而是明确指定您的文件所在的位置。您可以通过获取当前正在执行的 EXE 的路径并将 files\myfiles.txt
附加到它来做到这一点。
您可以使用 Assembly.GetExecutingAssembly().Location
.
开发者路径
您的错误消息似乎指向开发人员计算机上的路径,但这实际上不是 .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"));