标题: 什么这段VBS监视文件删除时会返回错误呢?
[打印本页]
作者: fzhang
时间: 2008-11-18 18:28
标题: 什么这段VBS监视文件删除时会返回错误呢?
什么这段VBS监视文件删除时会返回错误呢?
'随时监视文件的建立与删除
Function monfile
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colMonitoredfolder = objWMIService.ExecNotificationQuery _
("SELECT * FROM __InstanceOperationEvent within 1 where " _
& "Targetinstance ISA 'CIM_DirectoryContainsFile' and " _
& "TargetInstance.GroupComponent= " _
& "'Win32_Directory.Name=""c:\\\\aa""'")
Do
Set objEvent = colMonitoredfolder.NextEvent
Set oFile = objWMIService.get(objEvent.TargetInstance.PartComponent)
Select Case objEvent.Path_.Class
Case "__InstanceCreationEvent"
MsgBox "大小为"&oFile.FileSize&"的文件"&oFile.name&"建立"
Case "__InstanceDeletionEvent"
MsgBox "大小为"&oFile.FileSize&"的文件"&oFile.name&"删除"
End Select
Loop
End Function
monfile
而监视文件创建没有问题。。。。
作者: HAT
时间: 2008-11-18 20:57
返回啥样错误呢?
作者: fzhang
时间: 2008-11-19 20:43
vbs运行后说错误码是80041002
我查了下百度,发现没有解决办法
监视文件的创建没有问题
但是监视文件的删除就有问题了
作者: slore
时间: 2008-11-20 03:18
strComputer
= "
."
Set objWMIService
= GetObject("
winmgmts:\\"
& strComputer
& "
\root\cimv2"
)
Set colMonitoredEvents
= objWMIService.ExecNotificationQuery _
("
SELECT * FROM __InstanceOperationEvent WITHIN 3 WHERE " _
& "
Targetinstance ISA 'CIM_DirectoryContainsFile' and " _
& "
TargetInstance.GroupComponent= " _
& "
'Win32_Directory.Name=""c:\\\\aa""'"
)
Do While True
Set objEventObject
= colMonitoredEvents.NextEvent
()
Select Case objEventObject.Path_.
Class
Case "
__InstanceCreationEvent"
Wscript.Echo "
A new file was just created: "
& _
objEventObject.TargetInstance.PartComponent
Case "
__InstanceDeletionEvent"
Wscript.Echo "
A file was just deleted: "
& _
objEventObject.TargetInstance.PartComponent
End Select
Loop
作者: huahua0919
时间: 2008-11-20 04:14
从Slore兄的代码看,应该是在get方法获取事件对象的文件属性时,如果文件创建则能够获取其大小等相关属性,而删除则无法获取其相关属性,所以关键问题处在get方法上。
先创建文件------get方法获取对象文件属性值--------返回成功
先删除文件------get方法获取对象文件属性值--------返回失败(此时文件已经被删除)
作者: fzhang
时间: 2008-11-20 19:04
Quote: |
Originally posted by huahua0919 at 2008-11-20 04:14:
从Slore兄的代码看,应该是在get方法获取事件对象的文件属性时,如果文件创建则能够获取其大小等相关属性,而删除则无法获取其相关属性,所以关 ... |
|
非常感谢,让我豁然开朗
问题应该出在当文件删除后由于文件不存在,那么用get方法无法获取文件属性了。
我想过一个笨办法,把PartComponent返回的当做一个字符串,然后从字符串右边开始提取到第一个=之间的字符串。一般情况下应该返回的就是文件名+后缀名。但问题是,如果文件名本身含有=号的时候,就会出现提取到错误的文件名的情况。。。
不知有没有什么好的解决方法
[
Last edited by fzhang on 2008-11-20 at 19:11 ]