2011-03-17 6 views
54

Sto provando a leggere un file di testo incorporato con System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(resource); ma mi dà un Stream. La risorsa incorporata è un file di testo quindi, come posso trasformare questo Stream in un TextReader?Ottieni un TextReader da un flusso?

risposta

141
TextReader tr = new StreamReader(stream); 
17

Un StreamReader è una sottoclasse di TextReader, in modo da essere in grado di fare:

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

È possibile leggere il file di risorse in questo modo:

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 ciclo 'foreach' è migliore di un enumeratore esplicito. –

+0

@ Martin: risolto, grazie. –

4

È necessario per ottenere un StreamReader da esso (TextReader è una classe base astratta di StreamReader e StringReader). Qualcosa del tipo:

var stream = System.Reflection.Assembly.GetExecutingAssembly(). 
    GetManifestResourceStream(resource); 
var reader = new StreamReader(stream); 
var text = reader.ReadToEnd();