【发布时间】:2012-04-04 07:20:33
【问题描述】:
我正在使用 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 的最佳方法是什么?谢谢。
更新:我正在处理文本文件。
【问题讨论】:
-
你试过把它放在 Using-block 中吗?
-
这并没有解决您的问题,但我认为您应该知道
StreamReader/-Writer确实不读取字节,它读取字符。你确实分配了一个char[],但是你调用了你的变量bytesRead,这是错误的。如果文件是 text 文件,您应该只使用StreamReader/-Writer。如果您想复制任何类型的数据,请使用FileStream(您使用File.Open()创建)。 -
听起来你没有任何选择。清理任何物体,修复任何伤害,然后放弃或重试。
-
@Timwi 确实如此——也许那时还没有!由于本案例是原始副本,因此 Stream API 是更好的选择,您是对的。
-
@nthpixel 使用 using 块将在退出该块时清理 StreamWriter 对象。因此,当发生异常时,对象会被正确处置。这可能是解决您的问题的开始。
标签: c# file-io streamwriter