在网络恢复失败后处理steamwriter

时间:2012-03-19 19:14:12

标签: c# file-io streamwriter

我正在使用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的最佳方法是什么?感谢。

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

1 个答案:

答案 0 :(得分:0)

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

我怀疑可能发生的是目标文件被消隐为0字节。如果发生这种情况,遗憾的是您无法恢复复制过程,因为已经复制的数据已经消失。您现在可以做的就是重新实例化流并从头开始重新启动副本。对于大型文件,这可能意味着如果一直存在瞬态网络故障,它可能永远不会完成。

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

如果输入文件的网络连接失败(您正在阅读的文件),请使用File.Open()重新打开,然后再次设置inputFile.Position = outputFile.Position。< / p>

以上所有假设您应该使用Stream将数据读取为 bytes ,这在我看来比您发布的更合适的方法,在那里您阅读< em> characters 使用StreamReader(假设输入是 text 文件)。