状况:

  • 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帖)

你特别要求在 VB 中运行一些东西,并在 win98 上运行,我对此没有答案,但 MS 有一个 c/win32 示例,说明如何在 Windows2000+ 上实现这一点 查找第一个更改通知. 。另一件事显然是“文件系统观察者" .NET 在 Win98 上不工作/不支持。我的观点是什么?也许没有简单的解决方案,您必须自己想出一些办法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top