Получить TextReader из потока?


81

Я пытаюсь прочитать встроенный текстовый файл с , System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(resource);но это дает мне Stream. Встроенный ресурс - это текстовый файл, так как я могу превратить его Streamв TextReaderфайл?

Ответы:


183
TextReader tr = new StreamReader(stream);

1
Обратите внимание, что в этом назначении для преобразования байтов в символы используется кодировка. По умолчанию кодировка определяется.
R. Schreurs

18

A StreamReaderявляется подклассом TextReader, поэтому вы сможете:

using(var stream = System.Reflection.Assembly.GetExecutingAssembly().
    GetManifestResourceStream(resource))
using(var reader = new StreamReader(stream))
{
    // Use reader.
}

5

Вы можете прочитать свой файл ресурсов следующим образом:

Assembly resourceAssembly = Assembly.LoadFrom(resourceFile.FullName);
string[] manifests = resourceAssembly.GetManifestResourceNames();

using (ResourceReader reader = new ResourceReader(
    resourceAssembly.GetManifestResourceStream(manifests[0])))
{
    foreach (IDictionaryEnumerator dict in reader)
    {
        string key = dict.Key as string;
        object val = dict.Value;
    }
}

foreachПетля лучше , чем явное перечислителем.
Р. Мартиньо Фернандес

5

Вам нужно получить от него StreamReader (TextReader - это абстрактный базовый класс StreamReader и StringReader). Что-то вроде:

var stream = System.Reflection.Assembly.GetExecutingAssembly().
    GetManifestResourceStream(resource);
var reader = new StreamReader(stream);
var text = reader.ReadToEnd();
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.