¿Obtener un lector de texto de una secuencia?


81

Estoy tratando de leer un archivo de texto incrustado con System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(resource);pero me da un Stream. El recurso incrustado es un archivo de texto, entonces, ¿cómo puedo convertirlo Streamen un TextReader?

Respuestas:


183
TextReader tr = new StreamReader(stream);

1
Tenga en cuenta que en esta asignación, se utiliza una codificación para convertir de bytes a caracteres. De forma predeterminada, se detecta la codificación.
R. Schreurs

18

A StreamReaderes una subclase de TextReader, por lo que podrá hacer:

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

5

Puede leer su archivo de recursos así:

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

Un foreachbucle es mejor que un enumerador explícito.
R. Martinho Fernandes

5

Necesita obtener un StreamReader de él (TextReader es una clase base abstracta de StreamReader y StringReader). Algo como:

var stream = System.Reflection.Assembly.GetExecutingAssembly().
    GetManifestResourceStream(resource);
var reader = new StreamReader(stream);
var text = reader.ReadToEnd();
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.