为什么FileCopy在Windows 7上随机失败?

时间:2010-02-10 11:29:18

标签: vb6 file windows-7

我在Windows 7上运行了一个VB6程序。它正在复制大量文件,有时FileCopy因访问冲突而失败(每60到500个文件之间)。

我无法使用单个文件重现它,只有在此类大量复制操作期间才会出现此问题。

如果源/目标位于硬盘,网络共享或CD-ROM上,则没有区别。

什么可能触发这个问题?

编辑:我的问题可能有点复杂,所以这里有更多数据:

运行1:

  1. 开始复制5.000个文件
  2. 文件#983
  3. 上的访问冲突
  4. 文件#1437上的访问冲突
  5. 文件#1499上的访问冲突
  6. 文件#2132上的访问冲突
  7. 文件#3456
  8. 上的访问冲突
  9. 文件#4320上的访问冲突
  10. 完成
  11. 运行2:

    1. 开始复制5.000个文件
    2. 文件#60
    3. 上的访问冲突
    4. 文件#3745上的访问冲突
    5. 完成
    6. 观察

      • 受影响的文件总是不同
      • 如果连续多次复制同一文件批次,受影响文件的数量会减少。
      • 以管理员身份运行没有区别
      • 应用程序具有对所有必需文件系统对象的读/写访问权限
      • 此问题仅在Windows 7工作站上发生!

4 个答案:

答案 0 :(得分:4)

最佳猜测:在进程运行时,是否有可能另一个用户/应用程序正在使用指定的文件? (反病毒扫描程序,Win7搜索索引工具,Windows防御程序等)您可以尝试以安全心情启动计算机以消除任何后台服务/应用程序并尝试运行该过程以查看。

导致问题的文件类型或文件大小是否一致?

机器资源不足吗? RAM /磁盘空间

你说它出现在Win7上 - 是多台Win7机器还是只有一台。 (帮助排除系统资源与软件/操作系统)

来自事件查看器的任何提示(控制面板>管理工具) - 可疑

这个过程需要很长时间才能完成吗?如果您可以获得性能提升,您可能会在每个副本或每个X文件之后查看销毁和重新创建FSO对象,以确保Win7 / VB6没有奇怪的内存泄漏问题。

不一定是推荐的解决方案,但如果所有其他方法都失败了,您可以处理该错误并将触发它的文件保存在字典/集合中,并在完成后使用任何这些文件重新遍历该过程。不能保证它不会再发生。

答案 1 :(得分:3)

信息不足(您可能知道)。你记录活动了吗?如果没有,这是一个很好的起点。知道某些文件是否存在问题,以及问题是否可重复,可以帮助缩小范围。

在你的情况下,我也会陷阱(并记录)所有错误,并在等待N秒后重试N次。您可能正在尝试复制由其他进程锁定的正在使用的文件,并且重试可能会留出时间让该锁定消失。

实际上,更多数据是关键,而记录是获取数据的方法。

答案 2 :(得分:2)

您的防病毒程序或某些索引器是否有可能妨碍您的使用?

尝试在重现错误时创建procmon跟踪并查看实际失败的内容。通过跟踪,您可以看到是否有其他程序导致问题,或者您的应用程序是否尝试在某处写入(不正确的权限)或不能(没有足够空间的临时/临时目录)。

查看procmon页面上的presentations linkedMark Russinovich's blog,了解使用此工具解决各种Windows /应用程序谜题的一些很酷的例子。

答案 3 :(得分:1)

目录中是否存在可能阻止它的隐藏/系统文件?

右键单击“以管理员身份运行”运行VB6应用程序会有所作为吗?

它是否在目录中的最大文件数处死亡?例如你确定你在VB6中使用的循环结构的上限是正确的(Count vs count -1)?