vb.net在将文件移动到备份目录之前检查文件是否已完全复制
我有一个视频记录软件,可以在目录中记录视频文件。我正在编写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
谢谢在下面的代码中,您将最清楚地知道文件编写完成的时间
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
(如果存在),并使代理(经过一小段延迟)在文件准备就绪时运行复制文件的任务。您可以尝试在共享设置为的情况下打开文件。如果失败,则视频录制程序仍会打开文件。。。