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

时间:2008-08-20 15:04:21

标签: windows vb6 network-programming wireless intermittent

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

谢谢!

8 个答案:

答案 0 :(得分:13)

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

答案 1 :(得分:5)

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

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

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

答案 2 :(得分:5)

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

  • 您是否想要可重新启动的副本(具有如此小的文件大小,似乎不是那么大的交易)?如果是,请查看CopyFileEx with COPYFILERESTARTABLE
  • 您想要可验证的副本吗?听起来你已经通过验证哈希来获得它。
  • 你想要更好的表现吗?这听起来很难,因为听起来你无法在服务器上运行任何东西。否则,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));
}

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

答案 3 :(得分:1)

我同意Robocopy作为解决方案......这就是为什么该实用程序被称为“强大的文件复制”

  

我使用了Robocopy,效果非常好。默认情况下,它将每30秒重试一次,直到文件结束。

默认情况下,重试百万次。对于你的断断续续连接应该是足够的。

它还可以进行可重新启动的传输,你甚至可以在数据包之间有间隙来限制传输,因为你不想使用所有带宽,因为其他程序使用相同的连接(/ IPG交换机)?。

答案 4 :(得分:0)

如何在发送文件之后或之前简单地发送哈希值,并将其与您收到的文件进行比较?这至少应该确保你有一个正确的文件。

如果你想全力以赴,你可以做同样的过程,但对于文件的一小部分。然后当你有所有作品时,在接收端加入它们。

答案 5 :(得分:0)

答案 6 :(得分:0)

嗯,似乎rsync做到了,并且不需要服务器/守护进程/安装我认为它确实 - 只需$ rsync src dst。

答案 7 :(得分:-1)

短信如果有效。