Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果没有要写入的内容,如何停止StreamWriter不创建文件?_C#_.net_Io - Fatal编程技术网

C# 如果没有要写入的内容,如何停止StreamWriter不创建文件?

C# 如果没有要写入的内容,如何停止StreamWriter不创建文件?,c#,.net,io,C#,.net,Io,流编写器创建一个文件,即使没有要写的内容。如果在using语句中使用流编写器,原因是在块末尾使用块调用dispose方法 代码是 using (StreamWriter sw = new StreamWriter(@"d:\abc.txt")) { } 如果没有写的东西,我不会创建空白文件。我寻找的原因是我们有条件地编写日志。您可以编写如下内容: Lazy<StreamWriter> sw = new Lazy<StreamWriter>(() => new S

流编写器创建一个文件,即使没有要写的内容。如果在using语句中使用流编写器,原因是在块末尾使用块调用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();
    }
}
然后

using (DisposableLazy<StreamWriter> sw = new DisposableLazy<StreamWriter>(() => new StreamWriter(@"d:\abc.txt")))
{
    if (something)
    {
        sw.Value.WriteLine("Foo");
    }
}
使用(DisposableLazy sw=newdisposablelazy(()=>newstreamwriter(@“d:\abc.txt”))
{
如果(某物)
{
软件价值写入线(“Foo”);
}
}

在之前使用
if
来确定是否有东西要写?@nvoigt并不总是可能的。如果您正在记录某些内容,那么在记录之前如何知道是否要记录某些内容?也许您只记录错误或警告,而不是“正常”操作。。。或者您可能只记录外部事件。@xanatos考虑到您在建议的解决方案中有非常相同的
if(something)
条件,我真的不理解您的评论。@nvoigt
if(something)
可以是任何内容,它表示在
中使用
没有“自动”写入。如果(Console.ReadLine()=“YES”)
using (DisposableLazy<StreamWriter> sw = new DisposableLazy<StreamWriter>(() => new StreamWriter(@"d:\abc.txt")))
{
    if (something)
    {
        sw.Value.WriteLine("Foo");
    }
}