有没有办法使用“相同”流创建多文件输出?

问题描述 投票:0回答:1

我想做以下事情,但发现这是不可能的:

    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)将是限制。

c# io
1个回答
0
投票

如果您调用

SteamWriter.Close
,该方法将调用
Dispose(true)
,因此您正在关闭并处置它,但引用仍然可用。这就是为什么您不使用
??=
创建一个新的,如果您尝试使用它,则会导致
ObjectDisposedException

所以这应该按预期工作(如果没有其他问题):

if (_idRun % LargeNumber == 0)
{
    _msw?.Close();
    _msw = new StreamWriter("BlahBlah" + _outputCount.ToString() + ".txt");
    _outputCount++;
}
© www.soinside.com 2019 - 2024. All rights reserved.