vb.net在将文件移动到备份目录之前检查文件是否已完全复制

vb.net在将文件移动到备份目录之前检查文件是否已完全复制,vb.net,file,Vb.net,File,我有一个视频记录软件,可以在目录中记录视频文件。我正在编写vb.net代码,将完成的文件移动到另一个目录(外部硬盘)。 我只移动已完成录制的文件 我只需要移动已完成录制的文件。问题是我的代码移动了仍在录制的文件。 我的问题:如何检查当前是否未录制文件? 谢谢在下面的代码中,您将最清楚地知道文件编写完成的时间 Dim di As New IO.DirectoryInfo(dirPath) Dim noMod As New TimeSpan(0, 2, 0) 'last write

我有一个视频记录软件,可以在目录中记录视频文件。我正在编写vb.net代码,将完成的文件移动到另一个目录(外部硬盘)。 我只移动已完成录制的文件

我只需要移动已完成录制的文件。问题是我的代码移动了仍在录制的文件。 我的问题:如何检查当前是否未录制文件?
谢谢

在下面的代码中,您将最清楚地知道文件编写完成的时间

    Dim di As New IO.DirectoryInfo(dirPath)
    Dim noMod As New TimeSpan(0, 2, 0) 'last write time
    Dim _movTM As DateTime = DateTime.Now.Add(-noMod)

    For Each fi As IO.FileInfo In di.GetFiles
        If fi.LastWriteTime < _movTM Then
            'move here
        End If
    Next
Dim di作为新IO.DirectoryInfo(目录路径)
Dim noMod作为新TimeSpan(0,2,0)的上次写入时间
Dim_movTM As DateTime=DateTime.Now.Add(-noMod)
对于每个fi,在di.GetFiles中作为IO.FileInfo
如果fi.LastWriteTime<\u movTM,则
“搬过来
如果结束
下一个

在类似的情况下,我无法查看上次修改的日期,但使用计时器定期查看文件长度是非常可靠的,如果它在X分钟内保持稳定,那么我认为它已完成。看看dbasnett的答案是否适合您,如果不适合,我将从我的watcher程序中找出代码..您可以使用FileSystemWatcher。通常在创建文件和关闭文件时会通知您(它会通知大小或上次写入更改)。但是,当文件正在写入时不会。因此,您可以使用,例如,
ConcurrentDictionary(字符串,布尔值)
(或类对象,而不是字符串,以添加更多详细信息)作为存储:当您收到文件创建事件时,将文件名传递给代理方法,该方法可将文件名添加到字典(如果不存在)中,或将相应的值设置为
true
(如果存在),并使代理(经过一小段延迟)在文件准备就绪时运行复制文件的任务。您可以尝试在共享设置为的情况下打开文件。如果失败,则视频录制程序仍会打开文件。。。