簡體   English   中英

如何在.NET程序集中嵌入文本文件?

[英]How to embed a text file in a .NET assembly?

我想將文本文件嵌入到程序集中,這樣就可以加載文本而不必從磁盤讀取文本,並且我需要的所有內容都包含在exe中。 (以便更便攜)

有沒有辦法做到這一點? 我認為資源文件有什么用?

如果可以的話,該如何做以及如何以編程方式將文本加載到字符串中?

右鍵單擊項目文件,選擇“屬性”。

在打開的窗口中,轉到“資源”選項卡,如果它在選項卡頁面的中間只有一個藍色鏈接,則單擊它以創建一個新資源。

在此處輸入圖片說明

然后從選項卡頁面上方的工具欄中,選擇添加一個新的文本文件,為其命名,它將被添加到您的項目中並打開。

如果到此為止,則可以在代碼中鍵入Resources.TheNameYouGaveTheTextFileHere,然后訪問其內容。 請注意,第一次在類中使用Resources類時,需要添加using指令(在鍵入Resources獲得菜單以使VS為您完成操作后,按Ctrl +。)。

如果上述說明不清楚,請發表評論,我將對其進行編輯,直到完成或有意義:)

在Visual Studio 2003,Visual Studio 2005以及可能的早期版本中(在2008年同樣適用),您可以在項目中包含文本文件,然后在“屬性”面板中,將操作設置為“嵌入資源”。 然后,您可以使用Assembly.GetManifestResourceStream(string)以流的形式訪問文件。

這里的其他答案更方便。 為了完整起見,我將其包括在內。

請注意,此方法將適用於嵌入其他類型的文件,例如圖像,圖標,聲音等。

嵌入文本文件后,可以在代碼中的任何位置使用該文件,如下所示:

global::packageName.Properties.Resources.ThatFileName

是的,您是正確的-創建資源文件。 如果執行此操作,則無需“加載”字符串,它將被引用為Resource.WhateverStringYouDefined。

這對我有用。 (我需要讀取嵌入到可執行.NET圖像文件中的文件的內容。)

在執行任何操作之前,請將文件包含在Visual Studio中的解決方案中。 (在我的情況下是VS 2017社區。)我切換到Solution Explorer ,然后右鍵單擊Properties文件夾,選擇Add Existing Item並選擇了文件。 (例如, FileName.txt 。)然后,在仍位於Solution Explorer ,右鍵單擊包含的文件,選擇“ Properties ,然后選擇“ Build Action作為“ Embedded Resource

然后使用此代碼讀取其字節:

string strResourceName = "FileName.txt";

Assembly asm = Assembly.GetExecutingAssembly();
using( Stream rsrcStream = asm.GetManifestResourceStream(asm.GetName().Name + ".Properties." + strResourceName))
{
    using (StreamReader sRdr = new StreamReader(rsrcStream))
    {
        //For instance, gets it as text
        string strTxt = sRdr.ReadToEnd();
    }
}

注意,在這種情況下,你不需要該文件作為資源添加作為提出接受的答案

這是我所做的:

  1. 通過在項目上單擊鼠標右鍵,在Visual Studio中添加了我的文件(資源)。
  2. 右鍵單擊添加的每個文件,然后將“構建類型”更改為“嵌入式資源”。
  3. 為了訪問資源:

    一種。 使用以下函數GetExecutingAssembly()當前程序集: GetExecutingAssembly()

    b。 我添加的資源是一個文本文件,因此我使用GetManifestResourceStream(fileName)其讀GetManifestResourceStream(fileName) 我訪問文件名的方式是通過調用GetManifestResourceNames()

    C。 現在,如果需要的話,使用StreamReader()類將文件的末尾讀入變量。

添加到Pavan的答案中, 以獲取當前的程序集 (在常規部分):

Assembly _assembly;

GetManifestResourceStream(fileName) (在代碼中,需要從資源中讀取):

try
{
    _assembly = Assembly.GetExecutingAssembly();
    _textStreamReader = new StreamReader(_assembly.GetManifestResourceStream("*Namespace*.*FileName*.txt"));
}
catch
{
    Console.WritelLine("Error accessing resource!");
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM