Отримати 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.