如何停止StreamWriter不创建文件,如果没有写
本文关键字:如果没有 文件 创建 何停止 StreamWriter | 更新日期: 2023-09-27 17:53:28
如果在using语句中使用了Stream Writer,那么即使没有什么可写的,Stream Writer也会创建一个文件,原因是在块的末尾使用块调用dispose方法。
代码
using (StreamWriter sw = new StreamWriter(@"d:'abc.txt"))
{
}
如果没有什么可写的,我不想不创建空白文件。我要找的原因是我们有条件地写日志。
你可以这样写:
Lazy<StreamWriter> sw = new Lazy<StreamWriter>(() => new StreamWriter(@"d:'abc.txt"));
try
{
if (something)
{
sw.Value.WriteLine("Foo");
}
}
finally
{
if (sw.IsValueCreated)
{
sw.Value.Dispose();
}
}
使用Lazy<T>
封装StreamWriter
。
你甚至可以封装Lazy<T>
来"处理"IDisposable
:
public sealed class DisposableLazy<T> : Lazy<T>, IDisposable where T : IDisposable
{
public DisposableLazy(Func<T> valueFactory) : base(valueFactory)
{
}
// No unmanaged resources in this class, and it is sealed.
// No finalizer needed. See http://stackoverflow.com/a/3882819/613130
public void Dispose()
{
if (IsValueCreated)
{
Value.Dispose();
}
}
}
和
using (DisposableLazy<StreamWriter> sw = new DisposableLazy<StreamWriter>(() => new StreamWriter(@"d:'abc.txt")))
{
if (something)
{
sw.Value.WriteLine("Foo");
}
}