簡體   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