条件:
我的代码看起来像这样,使用MSScript使用VBScript的甾体包装编写。
do
a = files.collectfiles( "c:\userver", "" )
for i = 0 to ubound( a )
f = a(i)
if strings.endswith( f, ".usv" ) then
d = files.readfilee( f )
on error resume next
executeglobal d
nErr = err.number
sErr = err.description
on error goto 0
if nErr <> 0 then
trace "*** Error " & nErr & ", " & sErr
end if
files.deletefile f
end if
next
system.sleep 10
system.cooperate
loop
调用files.collectfiles有很多磁盘活动。有没有办法检测文件夹内容的变化而不实际扫描文件夹中的文件?
答案 0 :(得分:2)
有一个样本声称适用于从Win95到leas WinXP的所有版本。使用VB5在Win98下开发。使用(然后提供的链接到下面的文档)未记录的SHChangeNotify *函数。
SHChangeNotifyRegister: Receive Shell Change Notifications
SHChangeNotifyRegister Function SHChangeNotifyDeregister Function
此处使用ReadDirectoryChangesW还有另一种解决方案:
VB6 WinAPI ReadDirectoryChangesW(查看杨角华的第5个帖子)
答案 1 :(得分:1)
定义“文件夹内容的更改”。
如果这意味着添加,删除或重命名了文件,则只要发生此类事件,就会更新文件夹的修改时间戳。
如果您想要知道文件何时被修改,那么您需要阅读它们。
那说,看看你想要做什么(扫描文件夹中的新.usv文件,处理它们并删除它们),然后只需跟踪文件夹上的时间戳并在你打电话之前更新它collectfiles是最好的(请注意,正确的记录时间只是在调用collectfiles之前,否则如果在collectfiles调用期间或之后立即添加文件,则存在不唤醒的风险。)
答案 2 :(得分:0)
你特意要求在VB中运行并在win98上运行,但我没有答案,但MS有一个关于如何在Windows2000 + FindFirstChangeNotification上实现此目的的c / win32示例。另一件事是,显然在.NET中“FileSystemWatcher”在Win98上不起作用/支持。我的观点是什么?可能没有简单的解决方案,你必须自己想出一些东西。