【发布时间】:2011-07-17 14:39:40
【问题描述】:
我正在尝试使用System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(resource); 读取嵌入的文本文件,但它给了我Stream。嵌入的资源是一个文本文件,我怎样才能把这个Stream变成TextReader?
【问题讨论】:
我正在尝试使用System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(resource); 读取嵌入的文本文件,但它给了我Stream。嵌入的资源是一个文本文件,我怎样才能把这个Stream变成TextReader?
【问题讨论】:
StreamReader 是TextReader 的子类,所以你可以这样做:
using(var stream = System.Reflection.Assembly.GetExecutingAssembly().
GetManifestResourceStream(resource))
using(var reader = new StreamReader(stream))
{
// Use reader.
}
【讨论】:
你需要从中获取一个 StreamReader(TextReader 是 StreamReader 和 StringReader 的抽象基类)。比如:
var stream = System.Reflection.Assembly.GetExecutingAssembly().
GetManifestResourceStream(resource);
var reader = new StreamReader(stream);
var text = reader.ReadToEnd();
【讨论】:
你可以像这样读取你的资源文件:
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;
}
}
【讨论】:
foreach 循环优于显式枚举器。
TextReader tr = new StreamReader(stream);
【讨论】: