2013-08-07 65 views
9

我創建了一個完美的完整項目。我的問題涉及安裝項目。當我在另一臺計算機上使用它時,即使它們在部署期間位於資源文件夾內,也無法找到該文本文件!閱讀嵌入式文本文件

如何確保在另一臺計算機上安裝軟件後,我的程序能夠找到這些文本文件!

我一直在尋找這個解決方案,但徒勞無功。請幫我解決這個問題。如果我能得到一個完整的代碼,那我會很開心的!

+2

請提供更多的信息。你在用什麼IDE?這是什麼類型的項目?你是如何在資源文件夾中包含文本文件的?你在文本文件上設置了哪些構建選項? –

+0

我正在使用c#。其中有很多文本文件和我讀這些文件的方式的項目是我打開一個文件,只讀取我想要的那個文件的藥水。這意味着我有時會跳過該文件中的行,具體取決於我想要的內容。我已將這些文件(69個文本文件)包含在資源目錄中。所以在部署之後,我想要在另一臺計算機上安裝安裝程序時,我的程序能夠讀取這些文件!我真的很掙扎!我想要一個完整的代碼。 –

+0

你正在用C#編寫,但告訴我們你正在使用哪個IDE,(如果不是monoDevelop,視覺工作室將是我的第一個賭注)將幫助我們告訴你如何配置構建動作。 –

回答

2

假設你的意思是你在你的項目中的文件,你已經設置爲EmbeddedResource,你想

using (var stream = Assembly.GetExecutingAssembly() 
    .GetManifestResourceStream(path)) 
{ 
    ... 
} 

其中path應該是集名稱後面的相對路徑的文件項目文件夾層次。使用的分隔符是句號.

所以,如果你有一個名爲MyCompany.MyProject和裝配則該項目中,你有一個文件夾包含TestImage.jpg,你可以使用路徑MyCompany.MyProject.Test.Image.jpg以獲取它Stream

+0

非常感謝。它幫助了我。 – Vikram

22

FIrst將文本文件的構建操作設置爲「EmbeddedResource」。

然後讀取你的代碼的文件:

var assembly = Assembly.GetExecutingAssembly(); 
var resourceName = "AssemblyName.MyFile.txt"; 

using (Stream stream = assembly.GetManifestResourceStream(resourceName)) 
{ 
    using (StreamReader reader = new StreamReader(stream)) 
    { 
     string result = reader.ReadToEnd(); 
    } 
} 

如果你不能找出嵌入資源的名稱就這樣找到的名字,它應該是顯而易見的,你的文件是:

assembly.GetManifestResourceNames(); 

這是假設您希望將文本文件嵌入到程序集中。如果不是,那麼您可能只想更改安裝項目以在安裝過程中包含文本文件。

+0

和什麼AssemblyName在這種情況下?在「AssemblyName.MyFile.txt」裏面。 –

+1

將文本文件的構建操作設置爲「嵌入式資源」是關鍵。謝謝。 –

+0

所以@MoloraneMothusi,這是公認的答案嗎?如果是這樣,請將其標記爲。 :) –

1

創建此功能讀取您有任何嵌入的資源文本文件:

public string GetFromResources(string resourceName) 
{ 
    Assembly assem = this.GetType().Assembly; 

    using (Stream stream = assem.GetManifestResourceStream(resourceName)) 
    { 
     using (var reader = new StreamReader(stream)) 
     { 
      return reader.ReadToEnd(); 
     } 

    } 
} 
+0

這不僅僅是7分鐘前已寫的內容的副本? –

+0

甚至沒有看到你的帖子timothy(我猜你說這是因爲你的帖子),我正在創建一個OP的方法檢索資源中的任何文本文件,因爲這不是你的副本,我很抱歉,如果我冒犯了你或其他任何人都不希望這樣做,這不是一個副本。 – terrybozzio

+1

不用擔心。只要不是故意的,沒有錯。 –