C# 如何在Windows XP上成功关闭TextWriter流?
我有一个类似下面的代码,用于处理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 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()。我也测试过这种方法,但问题仍然存在!