2011-03-17 5 views
54

Я пытаюсь прочитать встроенный текстовый файл с System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(resource);, но он дает мне Stream. Встроенный ресурс является текстовым файлом, поэтому, как я могу превратить этот Stream в TextReader?Получите TextReader из потока?

ответ

141
TextReader tr = new StreamReader(stream); 
17

StreamReader является подклассом TextReader, так что вы сможете сделать:

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

Вы можете прочитать файл ресурсов, как это:

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

Цикл foreach лучше, чем явный перечислитель. –

+0

@Martinho: Исправлено, спасибо. –

4

Вы должны получить StreamReader (TextReader - абстрактный базовый класс StreamReader и StringReader). Что-то вроде:

var stream = System.Reflection.Assembly.GetExecutingAssembly(). 
    GetManifestResourceStream(resource); 
var reader = new StreamReader(stream); 
var text = reader.ReadToEnd(); 
Смежные вопросы