2011-03-17 7 views
54

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 convertir este Stream en un TextReader?¿Obtienes un TextReader de un Stream?

Respuesta

141
TextReader tr = new StreamReader(stream); 
17

Un StreamReader es una subclase de TextReader, por lo que será capaz de hacer:

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

Usted puede leer el archivo de recursos como esto:

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

Un bucle 'foreach' es mejor que un enumerador explícito. –

+0

@Martinho: corregido, gracias. –

4

Usted tiene que estar 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(); 
Cuestiones relacionadas