通过间歇性网络连接复制文件

Eri*_*ohl 13 windows vb6 wireless network-programming intermittent

我正在寻找一种通过Windows网络共享复制文件的强大方法,该网络共享可以容忍间歇性连接.该应用程序通常用于大型医院的无线,移动工作站,我认为连接可能会暂时丢失或一次丢失几分钟.涉及的文件大小通常约为200KB-500KB.该应用程序是用VB6(ugh)编写的,但我们经常最终使用Windows DLL调用.

谢谢!

Joe*_*sky 13

我已经使用了Robocopy,效果非常好.默认情况下,它将每30秒重试一次,直到文件通过.


The*_*urf 5

尝试使用BITS(后台智能传输服务).它是Windows Update使用的基础结构,可通过Win32 API访问,专门用于解决此问题.

它通常用于应用程序更新,但应该在任何文件移动情况下都能正常工作.

http://www.codeproject.com/KB/IP/bitsman.aspx


Mar*_*ett 5

我不清楚你的实际问题是什么,所以我会抛出一些想法.

  • 你想要可重新启动的副本(具有如此小的文件大小,似乎不是那么大的交易)?如果是这样,请使用COPYFILERESTARTABLE查看CopyFileEx
  • 你想要可验证的副本吗?听起来你已经通过验证哈希来获得它.
  • 你想要更好的表现吗?这听起来很难,因为听起来你无法在服务器上运行任何东西.否则,TransmitFile可能会有所帮助.
  • 你只想要一场火灾而忘记操作吗?我想炮轰robocopy,或TeraCopy或其他东西会起作用 - 但对我来说似乎有些笨拙.
  • 你想知道网络什么时候回来吗?IsNetworkAlive有你的答案.

根据我目前所知,我认为以下伪代码将是我的方法:

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));
}
Run Code Online (Sandbox Code Playgroud)

首先压缩文件可以保存跟踪您已成功复制的文件以及需要重新启动的文件.它还应该使副本更快(更小的文件总大小和更大的单个文件大小),代价是双方的一些CPU功率.一个简单的批处理文件可以在服务器端解压缩它.