[英]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将被存储在哪里? 您应该拥有此文件的绝对位置。
有几种选择
您可以将此文件放在放置exe的同一目录中,这样您只需要这样做
new StreamReader("myData.csv");
您可以在App.Conig文件中定义文件位置并读取该位置。
你可以设置一个路径变量来读取PATH变量。
您应该将代码更改为
new StreamReader("myData.csv");
这将确保始终从运行.exe的同一文件夹中读取数据。
之后,您可以创建一个后期构建步骤,将文件复制到部署文件夹(或子文件夹),这样即使在调试环境中,文件也将位于正确的位置。 如果您只需要将文件放在项目的输出路径中,则数据文件上的“复制到输出文件夹”属性也会执行此操作。
如果您需要更多控制,在后期构建步骤中,您可以使用宏(如$(ProjectPath))来引用项目文件所在的位置,使用$(TargetDir)来引用输出目录所在的位置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.