Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.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# 如何在Windows XP上成功关闭TextWriter流?_C#_.net_Io_Try Catch Finally - Fatal编程技术网

C# 如何在Windows XP上成功关闭TextWriter流?

C# 如何在Windows XP上成功关闭TextWriter流?,c#,.net,io,try-catch-finally,C#,.net,Io,Try Catch Finally,我有一个类似下面的代码,用于处理TextWriter流 TextWriter TR = new StreamWriter(@"") try { //Logic } catch (Exception exception) { //Error Reporting } finally { if (TR != null) TR.Close(); } 我的.Net版本是4.0,此代码在Windows 7上正常工作,但在Windows XP中无法正常工

我有一个类似下面的代码,用于处理TextWriter流

TextWriter TR = new StreamWriter(@"")

try
{

    //Logic

}
catch (Exception exception)
{

    //Error Reporting

}
finally
{

    if (TR != null)
        TR.Close();

}

我的.Net版本是4.0,此代码在Windows 7上正常工作,但在Windows XP中无法正常工作!!似乎流没有关闭,并且许多缓冲区没有写入文件!我不知道!有人能帮我解决这个问题吗?

听起来问题不是流没有关闭,而是流可能在写入之前就已经关闭了。 对于大多数流输出,您需要刷新输出流,以确保在关闭之前已写入更改。如果不这样做,则未刷新的数据将丢失,这听起来与您看到的非常相似

正如杰拉尔德所建议的,我也会推荐

using(var writer = new StreamWriter(@"")
{
    // ...

    writer.Flush();
} 

格式,因为虽然它只是实现了与try{…}finally{…}大致相同的效果,但它更优雅一些,更容易获得正确的结果。

可能不是一个直接的解决方案,但也请查看
使用
关键字以获得更优雅的代码:)详细信息“流未关闭”-其他代码可以打开或删除它吗?查看您的代码,它听起来更像是出错的逻辑部分,并且在其他人建议之前放弃它,您应该尝试使您的代码更健壮(例如,使用
使用
)。再举一个例子,
if(TR!=null)
条件永远不会是
false
,因为如果上面的
StreamWriter
的构造函数抛出(当然,除非您在未显示的代码中的某个地方将其设置为
null
),则永远不会到达该代码。Close()调用Dispose()并调用Flush()。我也测试过这种方法,但问题仍然存在!