Как прочитать встроенный ресурс (текстовый файл), используя StreamReader
и вернуть его в виде строки? Мой текущий сценарий использует форму Windows и текстовое поле, которое позволяет пользователю находить и заменять текст в текстовом файле, который не внедрен.
private void button1_Click(object sender, EventArgs e)
{
StringCollection strValuesToSearch = new StringCollection();
strValuesToSearch.Add("Apple");
string stringToReplace;
stringToReplace = textBox1.Text;
StreamReader FileReader = new StreamReader(@"C:\MyFile.txt");
string FileContents;
FileContents = FileReader.ReadToEnd();
FileReader.Close();
foreach (string s in strValuesToSearch)
{
if (FileContents.Contains(s))
FileContents = FileContents.Replace(s, stringToReplace);
}
StreamWriter FileWriter = new StreamWriter(@"MyFile.txt");
FileWriter.Write(FileContents);
FileWriter.Close();
}
источник
Environment.SpecialFolder
чтобы получить папку на рабочем столе. Вы должны иметь в виду, что ресурс будет иметь пространство имен на основе его пути в проекте, поэтому его имя может быть не простоfile1.txt
.GetManifestResourceStream
нуждается в пути, как указывает @adrian. Если это помогает любому, что путь, как то , что @SimpleCoder показывает в примере:MyNamespace.Filename.Ext
. Я ранее пытался,MyNamespace.Resources.Filename.Ext
но это приводит к нулю.using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
Вы можете добавить файл в качестве ресурса, используя два отдельных метода.
Код C #, необходимый для доступа к файлу, отличается в зависимости от метода, использованного для добавления файла.
Способ 1: добавить существующий файл, установить свойство
Embedded Resource
Добавьте файл в свой проект, затем установите тип
Embedded Resource
.ПРИМЕЧАНИЕ. Если вы добавляете файл с помощью этого метода, вы можете использовать
GetManifestResourceStream
для доступа к нему (см. Ответ из @dtb ).Способ 2: Добавить файл в
Resources.resx
Откройте
Resources.resx
файл, используйте раскрывающийся список, чтобы добавить файл, установитеAccess Modifier
вpublic
.ПРИМЕЧАНИЕ. Если вы добавляете файл с помощью этого метода, вы можете использовать
Properties.Resources
для доступа к нему (см. Ответ от @Night Walker ).источник
Resource
ничего не делает, что позволяет считывать элемент как ресурс? Вы должны использоватьEmbeddedResource
или добавить вResources.resx
файл?Properties.Resources.Your_resource_name
пишу это:Properties.Resources.ResourceManager.GetObject("Your_resource_name")
.В основном, вы используете,
System.Reflection
чтобы получить ссылку на текущую сборку. Затем вы используетеGetManifestResourceStream()
.Пример со страницы, которую я разместил:
Примечание : нужно добавить,
using System.Reflection;
чтобы это работалоисточник
namespace
качестве части имени ресурсаvar auxList= System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceNames();
Этот метод может быть очень полезен, когда вы хотите узнать точное имя ресурса. (Взято из вопроса stackoverflow.com/questions/27757/… )В Visual Studio вы можете напрямую встроить доступ к файловому ресурсу через вкладку «Ресурсы» свойств проекта (в данном примере «Аналитика»).
Полученный файл может затем быть доступен как байтовый массив
Если вам это нужно в качестве потока, то (из https://stackoverflow.com/a/4736185/432976 )
источник
Когда вы добавили файл к ресурсам, вы должны выбрать его модификаторы доступа как общедоступные, чем сделать что-то вроде следующего.
CLIST01 - это имя встроенного файла.
На самом деле вы можете перейти к resources.Designer.cs и посмотреть, как называется геттер.
источник
Action
значениеIncorporated ressource
, у меня нетAccess Modifiers
поля на панели свойств. Кроме того, у меня нетPropersites.Resources
класса, я получаю сообщениеThe name 'Properties' does not exist in the current context
об ошибке при компиляции вашего кода.Resources.resx
, см. Мой ответ о различных методах встраивания файлов в проект.добавив, например, Testfile.sql Меню проекта -> Свойства -> Ресурсы -> Добавить существующий файл
источник
Я знаю, что это старая ветка, но вот что сработало для меня:
прочитайте текст так:
Текст, который я добавил к ресурсам: «SomeText.txt»
источник
Вы также можете использовать эту упрощенную версию ответа @ dtb:
источник
Что-то, что я узнал только сейчас, это то, что вашему файлу не разрешено иметь "." (точка) в имени файла.
Templates.plainEmailBodyTemplate-en.txt -> Работает !!!
Templates.plainEmailBodyTemplate.en.txt -> не работает через GetManifestResourceStream ()
Вероятно, потому что структура запутывается по пространствам имен против имени файла ...
источник
Несмотря на все ваши возможности, я использую этот вспомогательный класс для чтения ресурсов из любой сборки и из любого пространства имен в общем виде.
источник
Я прочитал использование встроенного текстового файла ресурса:
Образец:
источник
Я знаю, что это старый, но я просто хотел указать на NETMF (.Net MicroFramework), вы можете легко сделать это:
Поскольку NETMF не имеет
GetManifestResourceStream
источник
После прочтения всех решений, размещенных здесь. Вот как я это решил:
источник
Ответ довольно прост, просто сделайте это, если вы добавили файл непосредственно из resources.resx.
С этой строкой кода текст из файла непосредственно читается из файла и помещается в строковую переменную.
источник
Меня раздражало, что вы всегда должны включать пространство имен и папку в строку. Я хотел упростить доступ к встроенным ресурсам. Вот почему я написал этот маленький класс. Не стесняйтесь использовать и улучшать!
Применение:
Учебный класс:
источник
Некоторые типы проектов VS .NET не генерируют файл .NET (.resx) автоматически. Следующие шаги добавляют файл ресурсов в ваш проект:
Resources
.Теперь вы можете добавить текстовый файл в качестве ресурса, например, XML-файл:
Resources
имеет свойство типаstring
, которое названо в честь включенного файла. Если имя файла, например, RibbonManifest.xml, то свойство должно иметь имяRibbonManifest
. Точное имя вы найдете в файле кода Resources.Designer.cs.string xml = Resources.RibbonManifest
. Общая форма естьResourceFileName.IncludedTextFileName
. Не используйте,ResourceManager.GetString
так как функция get свойства string уже сделала это.источник
источник
Это класс, который может оказаться очень удобным для чтения встроенных файлов ресурсов из текущего
Assembly
:источник
Для всех людей, которые просто хотят быстро получить текст в жестко закодированном файле в winforms;
Resources.<name of resource>.toString();
чтобы прочитать файл.Я бы не рекомендовал это как лучшую практику или что-то в этом роде, но он работает быстро и делает то, что ему нужно.
источник
Для пользователей, которые используют VB.Net
где
MyApplicationName
находится пространство имен моего приложения. Это не название сборки. Это имя определяется в свойствах проекта (вкладка «Приложение»).Если вы не нашли правильное имя ресурса, вы можете использовать
GetManifestResourceNames()
функциюили
или
источник
Прочитайте встроенный TXT-файл в событии загрузки формы.
Установите переменные динамически.
Позвоните, попробуйте поймать.
Создать Void для IncludeText (), Visual Studio делает это за вас. Нажмите на лампочку, чтобы автоматически сгенерировать кодовый блок.
Поместите следующее в блок сгенерированного кода
Ресурс 1
Ресурс 2
Ресурс 3
Если вы хотите отправить возвращаемую переменную куда-то еще, просто вызовите другую функцию и ...
Это было достигнуто благодаря методу объединения нескольких текстовых файлов и чтения их встроенных данных в одном расширенном текстовом поле. который был моим желаемым эффектом с этим образцом Кодекса.
источник