C#console app:没有.. \ .. \ filename的引用文件

时间:2010-12-05 04:42:03

标签: c# .net console filepath

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

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

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

我原本希望找到一个返回控制台应用程序“root”的方法 到目前为止,我尝试了以下内容:

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

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

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

3 个答案:

答案 0 :(得分:5)

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

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

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

然后您可以将路径与CSV文件名组合使用:

string filePath = Path.Combine(folder, "myData.csv");

答案 1 :(得分:2)

您的myData.csv将被存储在哪里?您应该拥有此文件的绝对位置。

有几个选项

  1. 您可以将此文件放在放置exe的同一目录中,这样您只需要执行

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

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

答案 2 :(得分:0)

您应该将代码更改为

new StreamReader("myData.csv");

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

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

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