我想做以下事情,但发现这是不可能的:
private StreamWriter? _msw;
private _outputCount = 0;
if (_idRun % LargeNumber == 0)
{
_msw?.Close();
_msw ??= new StreamWriter("BlahBlah" + _outputCount.ToString() + ".txt");
_outputCount++;
}
这个想法很简单。如果正在写入的文件变大,请将其关闭并打开另一个具有不同索引的名称相似的文件。这里的失败是被关闭的 Stream 保留其初始文件名,并且不允许它“变形”为新文件。具体错误是
未处理的异常。 System.ObjectDisposeException:无法写入已关闭的 TextWriter。
我怎样才能做到这一点?
我可以想象创建 20 个单独的文件流用于输出,但这似乎很浪费。另外,我感觉输出将生成许多 GB 的数据,而 20(或 30 或 300)将是限制。
SteamWriter.Close
,该方法将调用 Dispose(true)
,因此您正在关闭并处置它,但引用仍然可用。这就是为什么您不使用 ??=
创建一个新的,如果您尝试使用它,则会导致 ObjectDisposedException
。
所以这应该按预期工作(如果没有其他问题):
if (_idRun % LargeNumber == 0)
{
_msw?.Close();
_msw = new StreamWriter("BlahBlah" + _outputCount.ToString() + ".txt");
_outputCount++;
}