检测文件夹的内容是否已更改?

时间:2009-06-21 16:30:59

标签: vb6 vbscript wmi directory windows-98

条件:

  • 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有很多磁盘活动。有没有办法检测文件夹内容的变化而不实际扫描文件夹中的文件?

3 个答案:

答案 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上不起作用/支持。我的观点是什么?可能没有简单的解决方案,你必须自己想出一些东西。