我正在寻找一种可靠的方法来通过允许间歇性连接的 Windows 网络共享复制文件。该应用程序通常用于大型医院的无线移动工作站,我假设连接可能会暂时或一次丢失几分钟。涉及的文件大小通常约为 200KB - 500KB。该应用程序是用 VB6 编写的(呃),但我们经常最终使用 Windows DLL 调用。
谢谢!
我正在寻找一种可靠的方法来通过允许间歇性连接的 Windows 网络共享复制文件。该应用程序通常用于大型医院的无线移动工作站,我假设连接可能会暂时或一次丢失几分钟。涉及的文件大小通常约为 200KB - 500KB。该应用程序是用 VB6 编写的(呃),但我们经常最终使用 Windows DLL 调用。
谢谢!
我为此使用了Robocopy ,效果非常好。默认情况下,它将每 30 秒重试一次,直到文件通过。
尝试使用 BITS(后台智能传输服务)。它是 Windows Update 使用的基础架构,可通过 Win32 API 访问,并且专门为解决此问题而构建。
它通常用于应用程序更新,但在任何文件移动情况下都可以正常工作。
我不清楚你的实际问题是什么,所以我会抛出一些想法。
根据我目前所知道的,我认为以下伪代码将是我的方法:
sourceFile = Compress("*.*");
destFile = "X:\files.zip";
int copyFlags = COPYFILEFAILIFEXISTS | COPYFILERESTARTABLE;
while (CopyFileEx(sourceFile, destFile, null, null, false, copyFlags) == 0) {
do {
// optionally, increment a failed counter to break out at some point
Sleep(1000);
while (!IsNetworkAlive(NETWORKALIVELAN));
}
首先压缩文件可以让您跟踪已成功复制的文件以及需要重新启动的文件。它还应该使复制速度更快(总文件大小更小,单个文件大小更大),但代价是双方都消耗了一些 CPU 能力。一个简单的批处理文件就可以在服务器端解压。
我同意 Robocopy 作为解决方案...这就是为什么该实用程序被称为“强大的文件复制”
我为此使用了 Robocopy,效果非常好。默认情况下,它将每 30 秒重试一次,直到文件通过。
默认情况下,一百万次重试。对于您的间歇性连接来说,这应该足够了。
它还可以重新启动传输,您甚至可以通过数据包之间的间隙来限制传输,以确保您不想使用所有带宽,因为其他程序正在使用相同的连接(/IPG 开关)?
在发送文件之后或之前简单地发送一个哈希值,并将其与您收到的文件进行比较如何?那至少应该确保您拥有正确的文件。
如果您想全力以赴,您可以执行相同的过程,但只针对文件的一小部分。然后,当你拥有所有碎片时,在接收端加入它们。
您可以使用 Microsoft SyncToy(免费)。
嗯,似乎 rsync 可以做到,并且不需要服务器/守护进程/安装,我认为可以 - 只需 $ rsync src dst。
SMS(如果可用)有效。