.net 为什么NET movefile有时会将源文件留在硬盘上

.net 为什么NET movefile有时会将源文件留在硬盘上,.net,vb.net,file-move,.net,Vb.net,File Move,我有一个很容易修复的情况,我有一个单行代码,如下所示:- My.Computer.FileSystem.MoveFile(f_source, f_dest, True) “覆盖”选项为true 在大容量文件移动期间,我有一个实例,其中有时,只是有时,源文件被留下,但目标文件被成功复制 它周围有错误陷阱(VB.NET/try/catch),但没有触发错误。这似乎只发生在远程(VPN)访问期间,而在站点上的相同操作并未表现出来 我怀疑这是在某种缓冲区填充期间发生的,因为移动是往返于移除驱动器,这有

我有一个很容易修复的情况,我有一个单行代码,如下所示:-

My.Computer.FileSystem.MoveFile(f_source, f_dest, True)
“覆盖”选项为true

在大容量文件移动期间,我有一个实例,其中有时,只是有时,源文件被留下,但目标文件被成功复制

它周围有错误陷阱(VB.NET/try/catch),但没有触发错误。这似乎只发生在远程(VPN)访问期间,而在站点上的相同操作并未表现出来

我怀疑这是在某种缓冲区填充期间发生的,因为移动是往返于移除驱动器,这有点像循环

此后,我在移动后添加了一个检查,以查看这两个文件是否存在,并在它们存在时删除源文件。我可以确认这已经被触发,到目前为止,它已经解决了我的问题

我没有使用任何后台或线程操作。我感到惊讶的是,控制权在未完成且没有错误的情况下被交还给了我的程序。这是一个已知的问题吗


我还没有测试过其他movefile选项,当然,我总是可以先复制然后删除,所以这没什么大不了的,但它确实让我吃惊。

我假设它在方法上遵循相同的规则。在这方面的评论中,它说:

如果尝试跨磁盘卷移动文件,并且该文件正在使用中,则会将该文件复制到目标,但不会从源中删除该文件


I/O中可能存在某种类型的延迟,尤其是在进行任何类型的文件扫描(防病毒等)的情况下。

我假设它在方法中遵循相同的规则。在这方面的评论中,它说:

如果尝试跨磁盘卷移动文件,并且该文件正在使用中,则会将该文件复制到目标,但不会从源中删除该文件


I/O中可能存在某种类型的延迟,特别是在正在进行任何类型的文件扫描(防病毒等)的情况下。

您是否能够确定是什么导致了延迟?您可以使用类似SysInternals工具的工具来观察它,并查看是否有任何东西在应用程序运行的同时与源文件一起工作。老实说,简易修复是一个事后存在性测试,因此我将其保留在该位置,并且在存在(两个文件)时删除源文件。克里斯·范宁(Chris Fannin)写的东西中有一些东西,因为我发现删除时重试了,错误是文件正在使用中,等等。但这不是病毒检查(我不认为)。但这是如此的时间紧迫,调查将是一项工作。它不会发生在服务器办公室内(仅VPN),并且每个办公室都使用UNC路径。我觉得很奇怪,有一个操作系统调用不能完成任务,也不能通过一个错误告诉你!我应该补充一点,这是在办公时间以外发生的,在那个阶段,这些文件不可供一般使用,所以我可以确定没有人打开它。我还注意到,它发生在批处理过程的中途,而不是在开始时,它似乎是在某种缓冲过程中发生的(请记住该过程的循环)。因此,当移动试图发出自己的删除时,可能实际上没有完成(或标记为已完成)。这很奇怪。如果它能给你一个具体的错误来帮助你确定发生了什么,那就太好了。这是一项乏味的工作,但是您可以尝试使用一些SysInternals工具来监视它,并查看访问它的内容,等等。您是否能够确定导致它的原因?您可以使用类似SysInternals工具的工具来观察它,并查看是否有任何东西在应用程序运行的同时与源文件一起工作。老实说,简易修复是一个事后存在性测试,因此我将其保留在该位置,并且在存在(两个文件)时删除源文件。克里斯·范宁(Chris Fannin)写的东西中有一些东西,因为我发现删除时重试了,错误是文件正在使用中,等等。但这不是病毒检查(我不认为)。但这是如此的时间紧迫,调查将是一项工作。它不会发生在服务器办公室内(仅VPN),并且每个办公室都使用UNC路径。我觉得很奇怪,有一个操作系统调用不能完成任务,也不能通过一个错误告诉你!我应该补充一点,这是在办公时间以外发生的,在那个阶段,这些文件不可供一般使用,所以我可以确定没有人打开它。我还注意到,它发生在批处理过程的中途,而不是在开始时,它似乎是在某种缓冲过程中发生的(请记住该过程的循环)。因此,当移动试图发出自己的删除时,可能实际上没有完成(或标记为已完成)。这很奇怪。如果它能给你一个具体的错误来帮助你确定发生了什么,那就太好了。这是一项乏味的工作,但是您可以尝试使用一些SysInternals工具来监视它,并查看访问它的内容,等等。