如果在使用语句中使用了Stream Writer,则即使没有要写的内容,Stream Writer也会创建一个文件,Reason在块的末尾使用块调用dispose方法.
代码是
using (StreamWriter sw = new StreamWriter(@"d:\abc.txt"))
{
}
Run Code Online (Sandbox Code Playgroud)
如果没有什么可写的,我不会创建空白文件.我正在寻找的原因是我们有条件地写日志.
你可以这样写:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
使用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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后
using (DisposableLazy<StreamWriter> sw = new DisposableLazy<StreamWriter>(() => new StreamWriter(@"d:\abc.txt")))
{
if (something)
{
sw.Value.WriteLine("Foo");
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
694 次 |
| 最近记录: |