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的主要内容,如果未能解决你的问题,请参考以下文章
调用 Stream.Write 和使用 StreamWriter 有啥区别?
StreamReader和StreamWriter中文乱码问题