2011-03-17 35 views
54

我正在尝试使用System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(resource);来读取嵌入的文本文件,但它给了我一个Stream。嵌入式资源是一个文本文件,所以我怎样才能把这个Stream变成TextReader从流中获取TextReader?

回答

141
TextReader tr = new StreamReader(stream); 
17

一个StreamReaderTextReader一个子类,所以你可以做:

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”循环比明确的枚举器更好。 – 2011-03-17 17:48:34

+0

@Martinho:固定,谢谢。 – 2011-03-17 17:57:09

4

你需要得到它的StreamReader(TextReader是StreamReader和StringReader的抽象基类)。例如:

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