注册 登录
编程论坛 VB6论坛

如何用VB编程监控指定文件夹下指定文件是否新增或修改?

kv48 发布于 2013-07-17 12:56, 1461 次点击
如何用VB编程监控指定文件夹下指定文件是否新增或修改?

有个flv视频文件会不定时地在C:\temp\pptt.flv中创建,且不同时间创建的文件名均为pptt.flv,也就是说随着时间的推移它会被覆盖,现在我要用VB编一个程序,如果发现这个pptt.flv创建了或修改了就将它复制并更名到
D:\flv\01.flv,下一个文件名为02.flv,以此类推,该如何做?

现在写了一个程序是这样的,但会出现错误70:拒绝的权限。本人初学,请朋友们帮我分析下原因,谢谢!

Private Sub Form_Load()
Timer1.Interval = 3000
Timer1.Enabled = True
End Sub
Private Sub Timer1_Timer()
Static ft As Date, fn As Long
If Dir("C:\temp\pptt.flv") <> "" Then
    If FileDateTime("C:\temp\pptt.flv") <> ft Then
        ft = FileDateTime("C:\temp\pptt.flv")
        fn = fn + 1
        FileCopy "C:\temp\pptt.flv", "D:\flv\" & Format(fn, "00000") & ".flv"
    End If
End If
End Sub

出现错误70时 点调试,下面这段显黄色: FileCopy "C:\temp\pptt.flv", "D:\flv\" & Format(fn, "00000") & ".flv"
是因为当第二次启动这个小程序时,由于第一次已经产生了文件00001.flv,00002.flv等,再次运行时还是产生文件00001.flv,00002.flv,就会发现文件已经存在(并且可能在使用)于是就出现“拒绝的权限”错误,如何解决?
12 回复
#2
kv482013-07-17 13:39
http://h.hiphotos.baidu.com/zhidao/wh%3D600%2C800/sign=7a14754d42166d2238221d92761325cf/aa64034f78f0f736802cbe870b55b319eac41361.jpg
想发张图上来,怎么找不到地方?
#3
风吹过b2013-07-17 14:58
FileCopy "C:\temp\pptt.flv", "D:\flv\" & Format(fn, "00000") & ".flv"

在复制之前,用 DIR 命令 检查一下这个文件是否存在,如果存在,那么就继续使用下一个编号,然后再重新检查,直到找到一个新的编号,没有使用为止。
#4
hjxlj2013-07-17 17:16
怎么手机回不了帖?
#5
hjxlj2013-07-17 17:19
这个问题有两个基本解决方法。
一是在你上面代码中添加错误处理环节,在错误处理过程中不断改变变量fn的值,并尝试保存文件,直到不引发错误为止。
二是在保存文件之前,先不断循环增加变量fn的值。每增加一次,就判断文件是否存在。若存在则继续循环。若不存在则说明此时的fn值可用,这时便可保存文件。
#6
kv482013-07-18 10:23
回复 3楼 风吹过b
能把程序写出来吗?我对VB不太熟悉。谢谢。
#7
kv482013-07-18 10:24
回复 5楼 hjxlj
谢谢您的回复,能把程序写出来吗?谢谢。
#8
风吹过b2013-07-18 12:41
fn = fn + 1
        FileCopy "C:\temp\pptt.flv", "D:\flv\" & Format(fn, "00000") & ".flv"

改为
        fn = fn + 1            '因为你的FN是静态变量,所以每次调用时直接加1就是了,不需要从 1 开始搜索
dim s as string                '定义一个字符串变量
do
   s="D:\flv\" & Format(fn, "00000") & ".flv"        '生成目标文件名
   if dir(s)<>"" then                                '是否存在。  空串表示文件不存在,有内容表示文件存在
      fn=fn+1                                        '文件存在,FN 加 1 ,继续循环
   else
      exit do                      '不存在,则退出循环
   end if
loop
   FileCopy "C:\temp\pptt.flv", s

浏览器写的代码,你试试看吧。流程就是这种的。
#9
kv482013-07-18 14:46
以下是引用风吹过b在2013-7-18 12:41:54的发言:

fn = fn + 1
        FileCopy "C:\temp\pptt.flv", "D:\flv\" & Format(fn, "00000") & ".flv"
 
改为
        fn = fn + 1            '因为你的FN是静态变量,所以每次调用时直接加1就是了,不需要从 1 开始搜索
dim s as string                '定义一个字符串变量
do
   s="D:\flv\" & Format(fn, "00000") & ".flv"        '生成目标文件名
   if dir(s)<>"" then                                '是否存在。  空串表示文件不存在,有内容表示文件存在
      fn=fn+1                                        '文件存在,FN 加 1 ,继续循环
   else
      exit do                      '不存在,则退出循环
   end if
loop
   FileCopy "C:\temp\pptt.flv", s
 
浏览器写的代码,你试试看吧。流程就是这种的。



还是一样的错误70,好像还没有解决。
#10
lowxiong2013-07-18 15:50
在temp中缓冲的flv是拷贝不出来的,并且页面一关闭就消失了。如果要拷贝应该可以在Temporary Internet Files文件夹中找到并拷贝,许多提取flv影片的程序都是这样做的。
#11
hjxlj2013-07-18 17:04
风吹过b说:
......
改为
fn = fn + 1 '因为你的FN是静态变量,所以每次调用时直接加1就是了,不需要从 1 开始搜索......。

这句话说的不对,虽然fn是静态变量,在单次运行程序期间,确实可以不管fn的值。但是当下次重新运行本程序时,fn的初始值仍然是从0开始,所以每次运行时必须循环检查fn的值,直到找到不存在和fn值同名的文件为止。
#12
kv482013-07-20 22:37

经过一天的调试,发现这样能解决问题:在这个语句FileCopy "C:\temp\pptt.flv", "D:\flv\" & Format(fn, "00000") & ".flv"前加入 On Error Resume Next,就能成功了。这是因为当文件刚开始生成但还没有生成完毕时,程序就检测到了并立刻复制,这样就会出错的。解决的办法就是用on error拦截错误.
#13
hjxlj2013-07-23 16:59
你这样用On Error Resume Next是最糟糕的方法。这条语句不是在处理错误,而只是隐藏错误,对所有错误睁一直眼闭一只眼,其结果是隐藏了所有错误。作为专业程序员,是应该完全避免这样做的。而且,加了这条语句之后,虽然不再报错误,但整个代码是实现不了你预定的功能的。
1