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?

Juan
quelle

Antworten:

182
TextReader tr = new StreamReader(stream);
Teo Klestrup Röijezon
quelle
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.
}
driis
quelle
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;
    }
}
Arnaud F.
quelle
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();
Paul Kearney - pk
quelle