[英]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();
}
}
注意,在這種情況下,你不需要該文件作為資源添加作為提出接受的答案 。
這是我所做的:
為了訪問資源:
一種。 使用以下函數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.