检测文件夹内容是否已更改?
-
06-07-2019 - |
题
状况:
- Windows 98 SE
- WMI 不可用
我的代码看起来像这样,是使用 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 的调用会产生大量磁盘活动。是否有某种方法可以检测文件夹内容的更改,而无需实际扫描文件夹中的文件?
解决方案
定义“文件夹内容的更改”。
如果这意味着文件被添加、删除或重命名,则每当发生此类事件时,都会更新文件夹的修改时间戳。
如果您想知道文件何时被修改,那么您需要阅读它们。
也就是说,看看您要执行的操作(扫描文件夹中是否有新的 .usv 文件,然后处理它们并删除它们),然后跟踪文件夹上的时间戳并在调用collectfiles 之前更新它是最好的(请注意,正确的记录时间是在调用collectfiles之前,否则如果在collectfiles调用期间或之后立即添加文件,您将面临无法唤醒的风险)。
其他提示
有一个样本声称适用于从 Win95 到至少 WinXP 的所有版本。在Win98下用VB5开发。使用(然后?提供了以下文档的链接)未记录的 SHChangeNotify* 函数。
SHChangeNotifyRegister:接收外壳更改通知
SHChangeNotifyRegister函数 SHChangeNotifyDeregister函数
还有另一种解决方案使用 读取目录更改W 这里:
VB6 WinAPI 读取目录更改W (查看杨国华第5帖)
不隶属于 StackOverflow