Holen Sie sich einen TextReader aus einem Stream?


80

Ich versuche eine eingebettete Textdatei mit zu lesen, System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(resource);aber es gibt mir eine Stream. Die eingebettete Ressource ist eine Textdatei. Wie kann ich daraus Streameine machen TextReader?

Antworten:


182
TextReader tr = new StreamReader(stream);

1
Bitte beachten Sie, dass bei dieser Zuweisung eine Codierung verwendet wird, um von Bytes in Zeichen zu konvertieren. Standardmäßig wird die Codierung erkannt.
R. Schreurs

18

A StreamReaderist eine Unterklasse von TextReader, sodass Sie Folgendes tun können:

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

5

Sie können Ihre Ressourcendatei folgendermaßen lesen:

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;
    }
}

Eine foreachSchleife ist besser als ein expliziter Enumerator.
R. Martinho Fernandes

5

Sie müssen einen StreamReader daraus abrufen (TextReader ist eine abstrakte Basisklasse von StreamReader und StringReader). Etwas wie:

var stream = System.Reflection.Assembly.GetExecutingAssembly().
    GetManifestResourceStream(resource);
var reader = new StreamReader(stream);
var text = reader.ReadToEnd();
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.