急,求救!谢谢各位了
由于filesystemwatcher是在监视文件夹有created事件就开始触发的,而并没有确认created的动作是否完成没有.但对于我目前做的项目却是一个大问题:由于我现在做的项目是一个监控系统,安装有大量的摄像头,每一分钟都 会生成大量一个3m多的视频文件, 而我要做的就是实时备份这些文件.
于是我做了一个判断created事件爱你是否完成的代码,如下:
Private Sub Waiting(ByVal path As String)
Try
Dim fi As FileInfo
fi = New FileInfo(path)
Dim len1, len2 As Long
len2 = fi.Length
Do
len1 = len2
Threading.Thread.Sleep(3000) '等待3秒钟
fi.Refresh()
len2 = fi.Length
Loop While len1 < len2
Catch
End Try
End Sub
现在的问题是,我在完成运行上面代码的判断后,正在对文件进行备份,filesystemwatcher监控的文件夹又有新的created事件产生,结果软件又跳到上面的代码去运行了.结果就是我根本完成不了备份总是中途被打断,跳到上面那段代码去.
现在问问大家也没有更好的办法,不用filesystemwatcher也行,只要可以有效的判断文件夹内文件的更新情况!谢谢大家,赶时间啊!
[解决办法]
你可以试试FileSystemWatcher.NotifyFilter 属性,监视是否完成,
http://msdn2.microsoft.com/zh-cn/library/system.io.filesystemwatcher.notifyfilter(VS.80).aspx
[解决办法]
每間隔一定時間檢測是否有新增文件,再備份是否可以解決。
[解决办法]
如下处理方式楼主看可行否:
1、 获得文件夹下按时间倒排序,最后一个文件的时间
2、 每分钟扫描一次,按时间倒排序,并与上次记录的时间比较。当然也要比较最后一个文件的文件名。
3、判断出需要复制文件的,执行复制
[解决办法]
可能没有使用多线程导致处理过程被新的事件中断运行而进入下一个处理过程,应该考虑用多线程来监控文件的变化,每当一个create事件发生时,就启动你的线程进行文件监控,最好是把Waiting方法写在一个单独的类中。如果摄像头数量很大,同时产生或写入的文件很多,会启动过多线程而影响系统正常运行,那么就要考虑队列,最多同时启动一定数量(根据实际情况而定)的线程进行文件监控,当一个线程结束时再启动下一个线程。
[解决办法]
用多线程,监视和备份不同的线程,线程之间做同步
[解决办法]
多线程处理比较合适
[解决办法]
线程池...异步处理...
你这个需求只能用多线程...谁说多线程就基本会死机?