4

我需要从 ac# 控制台应用程序中的文件中读取数据。
什么有效: new StreamReader(@"..\\..\myData.csv");

问题:..\\..\工作,因为我的 exe 文件位于 bin/Debug 目录中当我部署项目时,路径不再起作用

问题:无论 exe 文件的位置如何,我如何引用 myData.csv?

我曾希望找到一种方法来返回我的控制台应用程序的“根”到目前为止,我尝试了以下方法:

Process.GetCurrentProcess().MainModule.FileName
Path.GetDirectoryName(Assembly.GetEntryAssembly().Location
Path.GetFullPath("bp.csv")
AppDomain.CurrentDomain.BaseDirectory
Directory.GetCurrentDirectory()

所有这些表达式都将我引导到 exe 文件的目录而不是根目录。

我刚开始阅读有关隔离存储的信息,但如果有一些更简单的东西会很好。有什么建议/建议吗?

4

3 回答 3

6

最简单的选择可能是将您的 CSV 文件添加到解决方案并在 VS 中右键单击它并将构建操作设置为“如果较新则复制”,这将与 .exe 一起输出(到 Debug 或 Release 文件夹)你建立。

在代码中,您可以像这样获取正在执行的程序集的当前位置:

string folder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);

然后您可以将路径与 CSV 文件名结合起来:

string filePath = Path.Combine(folder, "myData.csv");
于 2010-12-05T06:21:24.107 回答
2

您的 myData.csv 将存储在哪里?你应该有这个文件的绝对位置。

有几个选择

  1. 您可以将此文件放在放置 exe 的同一目录中,因此您只需要做

    new StreamReader("myData.csv");
    
  2. 您可以在 App.Conig 文件中定义文件位置并读取该位置。

  3. 您可以设置路径变量并读取 PATH 变量。

于 2010-12-05T04:48:41.473 回答
0

您应该将代码更改为

new StreamReader("myData.csv");

这将确保始终从运行 .exe 的同一文件夹中读取数据。

之后,您可以创建一个后期构建步骤以将文件复制到部署文件夹(或子文件夹),这样即使在您的调试环境中,该文件也将位于正确的位置。如果您只需要文件位于项目的输出路径中,则数据文件上的“复制到输出文件夹”属性也将执行此操作。

如果您需要更多控制,在构建后的步骤中,您可以使用诸如 $(ProjectPath) 之类的宏来引用项目文件所在的位置,并使用 $(TargetDir) 来引用输出目录的位置。

于 2010-12-05T10:11:01.600 回答