【问题标题】:Get a TextReader from a Stream?从流中获取 TextReader?
【发布时间】:2011-07-17 14:39:40
【问题描述】:

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

【问题讨论】:

    标签: c# .net io


    【解决方案1】:

    StreamReaderTextReader 的子类,所以你可以这样做:

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

    【讨论】:

      【解决方案2】:

      你需要从中获取一个 StreamReader(TextReader 是 StreamReader 和 StringReader 的抽象基类)。比如:

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

      【讨论】:

        【解决方案3】:

        你可以像这样读取你的资源文件:

        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 循环优于显式枚举器。
        【解决方案4】:
        TextReader tr = new StreamReader(stream);
        

        【讨论】:

        • 请注意,在此分配中,编码用于将字节转换为字符。默认检测编码。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-20
        • 1970-01-01
        • 2015-05-30
        相关资源
        最近更新 更多