Проблемы с получением содержимого текстового файла ресурса в StreamReader
Я хотел бы иметь графический интерфейс, который дает пользователю два варианта:
- Прочитайте файл ключа, загруженный пользователем через openFileDialog.
- Прочитайте предварительно загруженный ключевой файл (пользователь выберет один из них с помощью radioButtons).
Это было бы полезно в том смысле, что пользователю не нужно было бы носить с собой все наши файлы ключей, но все равно обеспечивало бы гибкость, если необходимо было добавить новый файл ключей.
Мой код в настоящее время работает для варианта № 1. Я использую:
readFile = new StreamReader(KeyFileFullPath);
где KeyFileFullPath - это путь к файлу ключа, определенный openFileDialog.
Я хотел бы использовать тот же streamReader для варианта № 2, но у меня возникли проблемы с указанием читателя на файлы ресурсов.
Из этого вопроса я попытался сделать следующее:
_assembly = Assembly.GetExecutingAssembly();
readFile = new StreamReader(_assembly.GetManifestResourceStream(TM_Decoder.Properties.Resources._7p1_HOB_Key));
Я перешел к..."_7p1_HOB_Key", используя автозаполнение C#, поэтому я ожидал, что он укажет мне на что-то, что действительно существует. Однако, когда я пытаюсь запустить код, я получаю эту ошибку:
"Значение не может быть нулевым. Имя параметра: поток"
Исходя из этого, я попытался найти ManifestResourceNames, но все, что у него было: "TM_Decoder.Form1.resources" и "TM_Decoder.Properties.Resources.resources"
Ни один из них на самом деле не указывает на файл ключа, который я загрузил в ресурсы моего проекта.
Заранее спасибо за любую помощь в получении streamReader, чтобы указать на текстовый файл ресурса!
Изменения (в ответ на предложения SLaks):
- Если я не ошибаюсь в значении "корневого пространства имен", я думаю, что это правильно. Название проекта - "TM Decoder", поэтому я думаю, что "TM_Decoder" является корневым пространством имен. Разве это не правильно?
- Спасибо, я изменил действие по сборке на "Встроенный ресурс". Ранее было установлено "Нет" (я не знал об этом). К сожалению, этого было недостаточно для устранения проблемы (без изменений в результате попытки отладки).
- Я не уверен, что элементы находятся в папке Resource. Они находятся в папке с именем "resources" в папке проекта, то есть TM Decoder -> resources, в отличие от TM Decoder -> Properties -> Resources. Это то, что Visual Studio делал автоматически, когда я добавлял ресурсы через вкладку Resources. в свойствах проекта.
1 ответ
TM_Decoder.Properties.Resources._7p1_HOB_Key
является строкой, содержащей фактическое содержимое, а не имя ресурса."TM_Decoder.Resources._7p1_HOB_Key"
это имя ресурса.