2011-03-17 20 views
54

Tôi đang cố gắng đọc tệp văn bản được nhúng với System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(resource); nhưng nó cho tôi một số Stream. Tài nguyên được nhúng là một tệp văn bản, làm cách nào để tôi có thể biến số này Stream thành một số TextReader?Nhận TextReader từ luồng?

Trả lời

141
TextReader tr = new StreamReader(stream); 
17

Một StreamReader là một lớp con của TextReader, vì vậy bạn sẽ có thể làm:

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

Bạn có thể đọc tập tin tài nguyên của bạn như thế này:

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

Vòng lặp 'foreach' tốt hơn một điều tra rõ ràng. –

+0

@Martinho: Cố định, cảm ơn. –

4

Bạn cần phải nhận một StreamReader từ nó (TextReader là một lớp cơ sở trừu tượng của StreamReader và StringReader). Một cái gì đó như:

var stream = System.Reflection.Assembly.GetExecutingAssembly(). 
    GetManifestResourceStream(resource); 
var reader = new StreamReader(stream); 
var text = reader.ReadToEnd(); 
Các vấn đề liên quan