我需要从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文件的目录而不是根目录。
我刚刚开始阅读有关隔离存储的信息,但有一些更简单的东西会很高兴。有什么建议/建议吗?
答案 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将被存储在哪里?您应该拥有此文件的绝对位置。
有几个选项
您可以将此文件放在放置exe的同一目录中,这样您只需要执行
new StreamReader("myData.csv");
您可以在App.Conig文件中定义文件位置并读取该位置。
您可以设置路径变量并读取PATH变量。
答案 2 :(得分:0)
您应该将代码更改为
new StreamReader("myData.csv");
这将确保始终从运行.exe的同一文件夹中读取数据。
之后,您可以创建一个后期构建步骤,将文件复制到部署文件夹(或子文件夹),这样即使在调试环境中,文件也将位于正确的位置。如果您只需要将文件放在项目的输出路径中,数据文件中的“复制到输出文件夹”属性也会执行此操作。
如果您需要更多控制,在后期构建步骤中,您可以使用宏(如$(ProjectPath))来引用项目文件所在的位置,使用$(TargetDir)来引用输出目录所在的位置。