StreamWriter 和 IFormatProvider

Posted

技术标签:

【中文标题】StreamWriter 和 IFormatProvider【英文标题】:StreamWriter and IFormatProvider 【发布时间】:2012-08-14 06:08:52 【问题描述】:

如何将 IFormatProvider 传递给 StreamWriter?

具体来说我想创建一个new StreamWriter("myfile.txt", CultureInfo.InvariantCulture);

TextWriter 和 StringWriter 在构造函数中有一个参数,但 StreamWriter 没有。 属性 stringWriter.FormatProvider 是只读的。

我可以想到三种看似糟糕的解决方法:

更改 Thread.CurrentCulture:这将在库中,因此我宁愿不更改任何全局设置,即使是暂时的。 sw.WriteLine(InvariantCulture, , ):有很多 sw.WriteLine() 超过几个函数。我真的很想避免惹到他们所有人。 先使用 StringWriter,然后将字符串写入文件:由于流可能会变得非常大,这将产生巨大的开销。

有什么方法可以为 StreamWriter 指定一个 FormatProvider 吗?基于从 TextWriter 的继承,如果我可以设置属性,StreamWriter 必须有办法处理这个问题。

【问题讨论】:

【参考方案1】:

您可以创建一个继承自 StreamWriter 的新类并覆盖虚拟 FormatProvider 属性。

【讨论】:

【参考方案2】:

由于FormatProvider 属性是虚拟的,您可以创建自己的子类,它采用IFormatProvider

public class FormattingStreamWriter : StreamWriter

    private readonly IFormatProvider formatProvider;

    public FormattingStreamWriter(string path, IFormatProvider formatProvider)
        : base(path)
    
        this.formatProvider = formatProvider;
    
    public override IFormatProvider FormatProvider
    
        get
        
            return this.formatProvider;
        
    

【讨论】:

以上是关于StreamWriter 和 IFormatProvider的主要内容,如果未能解决你的问题,请参考以下文章

StreamWriter 和 UTF-8 字节顺序标记

调用 Stream.Write 和使用 StreamWriter 有啥区别?

StreamReader和StreamWriter中文乱码问题

StreamReader和StreamWriter说明

StreamReader 和 StreamWriter 简单调用

IO 101:TextWriter、FileStream 和 StreamWriter 之间的主要区别是啥?