Как вставить текстовый файл в сборку .NET?
Я хотел бы вставить текстовый файл в сборку, чтобы я мог загружать текст без необходимости читать его с диска, и чтобы все, что мне нужно, содержалось в exe. (Чтобы он был более портативным)
Есть ли способ сделать это? Я предполагаю что-то с файлами ресурсов?
И если вы можете, как вы это делаете и как вы программно загружаете текст в строку?
Ответы
Ответ 1
Щелкните правой кнопкой мыши файл проекта, выберите "Свойства".
В открывшемся окне перейдите на вкладку "Ресурсы", и если у нее есть только синяя ссылка в середине вкладки, щелкните ее, чтобы создать новый ресурс.
![enter image description here]()
Затем с панели инструментов над вкладкой выберите, чтобы добавить новый текстовый файл, укажите его имя, оно будет добавлено в ваш проект и открыто.
Если вы доберетесь так далеко, то в своем коде вы можете ввести Ресурсы. TheNameYouGaveTheTextFileHere, и вы можете получить доступ к его содержимому. Обратите внимание, что при первом использовании класса ресурсов в классе вам нужно добавить директиву using (нажмите Ctrl+. После ввода ресурсов, чтобы получить меню, чтобы заставить VS сделать это для вас).
Если что-то неясно о вышеприведенном описании, оставьте комментарий, и я отредактирую его до тех пор, пока он не будет полным или имеет смысл:)
Ответ 2
В Visual Studio 2003, Visual Studio 2005 и, возможно, более ранних версиях (это также работает в 2008 году) вы можете включить текстовый файл в свой проект, а затем на панели "Свойства" установите действие "Встроенный ресурс". Затем вы можете получить доступ к файлу в виде потока с помощью Assembly.GetManifestResourceStream(string)
.
Другие ответы здесь более удобны. Я включаю это для полноты.
Обратите внимание, что этот подход будет работать для встраивания других типов файлов, таких как изображения, значки, звуки и т.д.
Ответ 3
После того, как вы вложили текстовый файл, используйте этот файл где-нибудь в таком коде...
global::packageName.Properties.Resources.ThatFileName
Ответ 4
Да, вы правы - создайте файл ресурсов. Когда вы делаете это, вам не нужно "загружать" строку, на нее будет ссылаться как Resource.WhateverStringYouDefined.
Ответ 5
Вот что я сделал:
- Добавил мои файлы (ресурсы) в Visual Studio, щелкнув правой кнопкой мыши по проекту.
- Щелкните правой кнопкой мыши по каждому добавленному вами файлу и измените "Тип сборки" на "Встроенный ресурс".
-
Для доступа к ресурсу:
а. Получил текущую сборку с помощью функции: GetExecutingAssembly()
б. Ресурс, который я добавил, был текстовым файлом, поэтому я считал его в поток, используя GetManifestResourceStream(fileName)
. Я получил доступ к именам файлов путем вызова GetManifestResourceNames()
с. Теперь используйте StreamReader()
для чтения до конца файла в переменную, если это то, что вы хотите.
Ответ 6
Вот что у меня сработало. (Мне нужно было прочитать содержимое файла, встроенного в исполняемый файл образа .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();
}
}
Обратите внимание, что в этом случае вам не нужно добавлять этот файл в качестве ресурса, как это было предложено в принятом ответе.
Ответ 7
Добавляем в Pavan ответ, чтобы получить текущую сборку (в общем разделе):
Assembly _assembly;
GetManifestResourceStream (fileName) (в коде, где требуется чтение из ресурса):
try
{
_assembly = Assembly.GetExecutingAssembly();
_textStreamReader = new StreamReader(_assembly.GetManifestResourceStream("*Namespace*.*FileName*.txt"));
}
catch
{
Console.WritelLine("Error accessing resource!");
}