繁体   English   中英

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

[英]C# console app: reference file without ..\..\filename

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

问题: ..\\\\..\\ work,因为我的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文件的目录而不是根目录。

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

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

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

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

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

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

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

有几种选择

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

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

  3. 你可以设置一个路径变量来读取PATH变量。

您应该将代码更改为

new StreamReader("myData.csv");

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM