在网络恢复失败后处理蒸汽写入程序

本文关键字:程序 后处理 网络 恢复 失败 | 更新日期: 2023-09-27 18:28:21

我正在使用StreamWriter将块从一个文件复制到另一个文件。两个文件都在同一个远程位置,但进程在我的本地计算机上运行。我正在努力恢复并在网络出现问题时继续这个过程。我通过在特定时刻逐步执行代码并禁用网络连接来模拟这种情况。

问题是,当我恢复网络时,我无法使用StreamWriter执行任何操作。调用Flush()Close()Dispose()会引发IOException"指定的网络名称不再可用"。我的代码如下:

int charsToRead = 100;
while(!inputFileStream.EndOfStream)
{
    char[] block = new char[charsToRead];
    int charsRead = inputFileStream.ReadBlock(block, 0, charsToRead);
    outputFileStream.Write(new string(block, 0, charsRead));
    outputFileStream.Flush();
}

从网络故障中恢复后,继续使用StreamWriter的最佳方式是什么?谢谢

更新:我正在处理文本文件。

在网络恢复失败后处理蒸汽写入程序

在写入过程中网络连接中断后,目标文件会是什么样子?这一点很重要,因为您的恢复策略必然取决于此。

我怀疑可能发生的情况是,目标文件被清空为0字节。如果发生这种情况,不幸的是,您无法恢复复制过程,因为已经复制的数据已经不见了。现在所能做的就是重新实例化流,然后从头开始重新启动拷贝。对于大文件,这可能意味着如果一直存在瞬态网络故障,它可能永远不会完成。

但是,如果即使在网络故障的情况下也能成功写入目标文件,则可以使用File.Append()重新打开文件并继续复制过程。然后,您应该使用inputFile.Position = outputFile.Position,以便读取和写入再次同步。

如果输入文件(您正在读取的文件)的网络连接失败,只需使用File.Open()重新打开它,然后再次设置inputFile.Position = outputFile.Position

以上所有内容都假设您应该使用Stream将数据读取为字节,在我看来,这是一种比您发布的方法更合适的方法,即使用StreamReader读取字符(假设输入是文本文件)。