【问题标题】:Stop Robocopy locking files when copying复制时停止 Robocopy 锁定文件
【发布时间】:2016-06-29 04:44:54
【问题描述】:

我有一个用于 Robocopy 命令的小型 Windows VB 前端。这是将参数传递给 Robocopy 的代码行:

.StartInfo.Arguments = """" & txtCopyFrom.Text & """ """ & txtCopyTo.Text & _
                       """ /E /B /XJ /XF ""~*.*"" ""*~.*"" ""desktop.ini"" ""Thumbs.db"" "".lock"" "".Sync*""" & _
                       " /xd ""Rubbish"" "".Sync*"" "".Box Sync"" ""_private"" ""Outlook Files"" /FFT /R:2 /W:5 /V /TEE"

一切正常,除非用户想要修改正在复制的文件。用户从他们的程序中得到一个错误,然后在文件被复制时必须等待几分钟(文件最大可以达到 1GB,并且正在被自动复制到 USB 记忆棒中。

是否有开关或某种方法可以让 Robocopy 在复制文件时不锁定文件?显然 Robocopy 需要中止复制并等待文件可用,以便再次尝试。我在网上搜索了解决方案,但所有问题似乎都与 Robocopy 没有复制锁定文件的情况相反。

关于我在做什么的更多细节:

我的代码使用上述标志每 30 秒调用一次 Robocopy(我知道 robocopy 可以自行循环,但它并没有达到我想要的效果)。我设想我的应用程序只是在一天开始时运行,然后在一天结束时关闭。在另一台机器上,用户将打开一些第三方图像查看软件,该软件将锁定正在打开的文件,更新一些图像的元数据,然后保存更改。问题是当我的软件在用户之前锁定图像文件,然后用户无法编辑他们的文件。

谢谢

克里斯蒂安

【问题讨论】:

  • 将更快的本地副本复制到临时文件并改为复制?

标签: vb.net robocopy


【解决方案1】:

在用户想要访问文件的代码中,您可以在访问文件的代码之前添加此代码。

If Not p.HasExited Then
    p.Close()
End If
Threading.Thread.Sleep(100) ' to give the process time to close the file and close itself

【讨论】:

  • 我认为用户是直接从操作系统而不是通过应用程序访问文件,所以我认为这不是解决方案
  • 嗯,所以也许我对他 OP 的评论会更好。不完美,但更好
  • 感谢 cmets - 我会试试看我能多快复制文件。即使用户在另一台机器上,我仍然可以找到一种方法来检查他们是否打开了编辑软件,然后停止 robocopy
  • 经过一番谷歌搜索后,我在 [superuser] - superuser.com/questions/713525/… 上找到了一个帖子 - 这可能有助于在不锁定文件的情况下复制文件的程序 - xxcopy.com/xcpydnld.htm ...
猜你喜欢
  • 2011-06-28
  • 1970-01-01
  • 1970-01-01
  • 2010-09-17
  • 2014-01-04
  • 2014-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多