在网络恢复失败后处理蒸汽写入程序
本文关键字:程序 后处理 网络 恢复 失败 | 更新日期: 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
读取字符(假设输入是文本文件)。