2012-02-28 44 views
4

我想從以下結構讀取的文件路徑獲取文件從一個程序集

結構是這樣的:的AssemblyName - > MYFILES(文件夾) - > TEXT.TXT

在這裏,我想要得到的Text.txt的路徑。請幫助

回答

3

我認爲你在尋找什麼是嵌入在文件部件。退房this question。第一個答案解釋瞭如何設置嵌入式文件,以及如何從代碼中獲取它。

4

你可以做

string assemblyPath = Assembly.GetExecutingAssembly().Location; 
string assemblyDirectory = Path.GetDirectoryName(assemblyPath); 
string textPath = Path.Combine(assemblyDirectory, "MyFiles", "Test.txt"); 
string text = File.ReadAllText(textPath); 

...只是將它拆分了一些......但你可以把它寫在同一個線不用說......

另外,如果您Environment.CurrentDirectory已被設置爲您執行的程序集的位置的目錄,你可以只是做

File.ReadAllText(Path.Combine("MyFiles", "Text.txt")); 
+0

我收到一個異常,「找不到路徑的一部分'c:\ users \ taks \ documents \ visual studio 2010 \ Projects \ Console Applications \ GetFilesFromAssembly \ GetFilesFromAssembly \ bin \ Debug \ MyFiles \ Test.txt '「 – user1238374 2012-02-28 17:12:23

+0

@ JeffN825我認爲他有一個嵌入文件,而不是與程序集在同一目錄中的文件。 – 2012-02-28 17:22:50

+0

如果文件位於庫的文件夾而不是正在執行的程序集文件夾中,則這不起作用。除了嵌入式資源方法之外,我還沒有找到適用於庫子文件夾的方法。 – user420667 2016-10-26 19:48:13

0

傑夫已經覆蓋了你怎麼弄的路徑,在WRT他的回答您的評論是該文件的喲你想打開實際包含在你的項目輸出中?

在相關文件的屬性窗格下查看Copy to Output Directory選項 - 它通常默認爲Do not copy。如果你想用你編譯的程序在輸出目錄中包含一個文件,你需要將它設置爲Copy AlwaysCopy if Newer

作爲一般的注意,你應該總是包裝任何IO在適當的try catch塊或使用靜態File.Exists(path)方法來檢查文件是否存在

+0

問題是我無法將此文件複製到輸出目錄,我必須從提及的層次結構訪問此文件。 – user1238374 2012-02-28 17:19:52

+0

感謝Eric的建議,它正在工作,我已經嵌入了作爲資源 – user1238374 2012-02-28 17:29:58

+1

@ user1238374,「提到的層次」是什麼?你的第一級是「AssemblyName - >」,每個人都有不同的理解(程序集中的嵌入式資源,相對於程序集的路徑,甚至相對於GAC中的程序集的路徑),請澄清你的意思(以及可能* *想實現)。 – 2012-02-28 17:33:28