【问题标题】:Is there a way to check if a TextWriter is closed?有没有办法检查 TextWriter 是否关闭?
【发布时间】:2015-03-17 05:51:30
【问题描述】:

我正在编写一个将数据导出到 CSV 文件的类,它的构造函数接受一个 TextWriter。我使用 TextWriter 而不是 StreamWriter 的原因是它会使测试更容易:我可以使用相同的构造函数来写入 StreamWriter(写入文件,预期的用例)和写入 StringWriter (这对测试很有用)。

在我的构造函数中,我想对传入的 TextWriter 执行一些验证。问题是我似乎无法弄清楚如何检查 TextWriter 是打开还是关闭。如果 BaseStream 属性为空,则 StreamWriter 是可能的。但是 TextWriter 没有这个属性。还有其他方法可以检查 TextWriter 是否打开?

【问题讨论】:

  • 我不认为你可以在不侵入私人领域的情况下做到这一点,但我也不认为这真的很重要。访问失败对您的情况来说并不是一个非常糟糕的情况,因为在常见情况下,您的类将用于在初始化后立即写入。
  • 我写的类在初始化后不会马上写。该类有一个线程将在后台运行并在一段时间内继续写入,直到被告知停止。

标签: c# testing file-io textwriter


【解决方案1】:

你可以这样尝试:

if( writer.BaseStream != null)
{
   writer.WriteLine("Writer is open");
}
else
{
   MessageBox.Show ("Writer is closed");
}

即,如果 BaseStreamNULL,则 writer 已被释放。

还建议使用using 块,因为它会处理这个问题。

【讨论】:

  • 问题是TextWriter没有BaseStream属性,这就是我问这个问题的原因。
  • @9a3eedi:- 确实。所以我想剩下的唯一方法是使用 using 块,因为它会在完成后处理所有内容。
  • 当你有长时间运行和大量的代码时,上面建议的'using'块不是很站得住脚。要直接释放该类型,请在 try/catch 块中调用其 Dispose 方法。
猜你喜欢
  • 1970-01-01
  • 2022-06-10
  • 1970-01-01
  • 1970-01-01
  • 2018-08-02
  • 1970-01-01
  • 2020-11-25
  • 2014-12-22
  • 2018-01-09
相关资源
最近更新 更多