2011-03-17 21 views
54

Próbuję odczytać osadzony plik tekstowy z System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(resource);, ale daje mi to Stream. Osadzony zasób jest plikiem tekstowym, więc jak mogę zmienić ten Stream w ?Pobierz TextReader ze strumienia?

Odpowiedz

141
TextReader tr = new StreamReader(stream); 
17

StreamReader jest podklasą TextReader, więc będzie można zrobić:

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

można odczytać pliku zasobu takiego:

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

Pętla 'foreach' jest lepsza niż jawny moduł wyliczający. –

+0

@Martinho: Naprawiono, dzięki. –

4

Musisz dostać StreamReader (TextReader to abstrakcyjna klasa bazowa StreamReadera i StringReadera). Coś jak:

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