【问题标题】:Getting non-deterministic error while copying file to a network shared folder using File.Copy()使用 File.Copy() 将文件复制到网络共享文件夹时出现不确定性错误
【发布时间】:2013-01-24 11:22:03
【问题描述】:

我正在使用 C# File.Copy() 将多个备份文件从本地文件夹复制到网络共享文件夹,其中包括大于 1 TB 的小到大文件> 功能。以前这工作得很好。但是最近我在不同的时间面临不同类型的异常。我还尝试使用 NET USE 命令创建共享路径连接,即使凭据相同来解决此问题。

File.Copy(sourceFilePath, destinationFilePath, overwrite);

我得到的例外是:
- 错误:找不到文件。
- 错误:句柄无效。
- 错误:目前没有可用于处理登录请求的登录服务器。
- 错误:指定的网络名称不再可用。

注意:这些例外不适用于无效的文件路径。因为在复制文件的某些部分后会发生异常,并且之前为相同的文件工作过相同的代码。

有人有办法解决这种情况吗?

【问题讨论】:

    标签: c# copy


    【解决方案1】:

    在复制非常大的文件时,Windows 存在已知问题。例如,请参阅Windows file copy bug revisited。问题似乎是 Windows 想要缓存文件,并且为此付出了巨大的努力。它最终将几乎所有内存分配给缓存,最终导致致命的颠簸。这将导致其他系统(正在尝试复制文件)出现不确定性错误。

    解决方法是通过调用CopyFileEx 复制文件而不进行缓冲。不幸的是,.NET Framework 没有直接的方法可以做到这一点。所以我编写并发布了一些代码。见A Better File.Copy Replacement

    【讨论】:

    • 感谢@jim-mischel 的快速回复。如果我想使用 FileStream 复制文件,大于 1 TB 的文件的最佳缓冲区大小是多少?我在您的博客中发现您使用了 64 KB。更大的缓冲区大小不是更好,比如 8 MB 吗?
    • @SamratAlamgir:在我的测试中,我发现 64K 是一个很好的缓冲区大小值。我看到缓冲区高达 256K 时性能略有提高,但任何更大的缓冲区实际上都会导致文件复制速度下降。而且我已经看到 256K 缓冲区会导致性能下降,具体取决于系统。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-08
    • 1970-01-01
    相关资源
    最近更新 更多