【问题标题】:How can I close the TextWriter stream on Windows XP successfully?如何在 Windows XP 上成功关闭 TextWriter 流?
【发布时间】:2012-08-15 07:24:56
【问题描述】:

我有一个类似下面的代码用于处理 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 关键字以获得更优雅的代码:)
  • 详细信息“流未关闭”-其他代码可以打开或删除吗?
  • 看看你的代码,听起来更像是逻辑部分出了问题,它在完成之前就放弃了
  • 正如其他人所建议的,您应该尝试使您的代码更加健壮(例如,通过使用using)。再举一个例子,if (TR != null) 条件永远不会是false,因为如果上面的StreamWriter 的ctor 抛出,你永远不会到达那个代码(当然,除非你在代码中的某个地方将它设置为null,你没有显示)。

标签: c# .net io try-catch-finally


【解决方案1】:

听起来问题不在于流尚未关闭,而在于流可能在写入之前已关闭。 对于大多数流输出,您需要刷新输出流以确保在关闭之前已写入更改。如果您不这样做,那么未刷新的数据将会丢失,这听起来很像您所看到的。

正如杰拉德建议的那样,我也推荐

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

    writer.Flush();
} 

格式,因为虽然它实现的效果与 try{...}finally{...} 大致相同,但它更优雅,也更容易正确。

【讨论】:

  • Close() 调用 Dispose() 并调用 Flush()。
  • 我也测试过这个方法,问题依旧!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-06
  • 1970-01-01
  • 2010-11-15
  • 2016-03-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多