我正在寻找一种可靠的方法来通过Windowsnetworking共享来容忍间歇性连接复制文件。 该应用程序经常用于大型医院的无线移动工作站,我假设连接可能会暂时或几分钟内丢失。 涉及的文件大小通常约为200KB – 500KB。 该应用程序是用VB6(ugh)编写的,但是我们经常最终使用Windows DLL调用。
谢谢!
我不清楚你的实际问题是什么,所以我会抛出一些想法。
根据我目前所了解的情况,我认为下面的伪代码是我的方法:
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这个结果很好。 默认情况下,它将每30秒重试一次,直到文件通过。
尝试使用BITS(后台智能传输服务)。 这是Windows Update使用的基础架构,可以通过Win32 API访问,并专门为解决此问题而构建。
它通常用于应用程序更新,但应该在任何文件移动情况下都能正常工作。
我同意Robocopy作为解决方案…这就是为什么该实用程序被称为“强大的文件复制”
我已经使用Robocopy这个结果很好。 默认情况下,它将每30秒重试一次,直到文件通过。
默认情况下,一百万次重试。 这应该足够你的间歇性连接。
它也可以重新启动传输,你甚至可以节流传输与包之间的差距,你不想使用所有的带宽,因为其他程序正在使用相同的连接(/ IPG交换机)?
如何在发送文件之后或之前发送散列,并将其与您收到的文件进行比较? 至少应该确保你有一个正确的文件。
如果你想全力以赴,你可以做同样的过程,但对于文件的一小部分。 然后,当你有所有的作品,加入他们的接收端。
您可以使用Microsoft SyncToy(免费)。
嗯,似乎rsync做到这一点,并不需要服务器/守护进程/安装我以为它 – 只是$ rsync src dst。
短信,如果它是可用的作品。