【问题标题】:Detect if the contents of a folder have changed?检测文件夹的内容是否已更改?
【发布时间】:2010-11-04 16:30:05
【问题描述】:

条件:

  • 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 的调用有很多磁盘活动。是否有某种方法可以检测文件夹内容的变化,而无需实际扫描文件夹中的文件?

【问题讨论】:

    标签: vb6 vbscript wmi directory windows-98


    【解决方案1】:

    有一个示例声称适用于从 Win95 到至少 WinXP 的所有版本。在Win98下用VB5开发。使用(然后?提供到下面文档的链接)未记录的 SHChangeNotify* 函数。

    SHChangeNotifyRegister: Receive Shell Change Notifications

    SHChangeNotifyRegister Function SHChangeNotifyDeregister Function

    这里还有另一个使用ReadDirectoryChangesW的解决方案:

    VB6 WinAPI ReadDirectoryChangesW(查看杨角华的第5个帖子)

    【讨论】:

      【解决方案2】:

      定义“更改文件夹内容”。

      如果这意味着文件被添加、删除或重命名,则每当发生此类事件时,都会更新文件夹的修改时间戳。

      如果您想知道文件何时被修改,那么您需要阅读它们。

      也就是说,查看您正在尝试执行的操作(扫描文件夹以查找新的 .usv 文件,然后处理并删除它们),然后只需跟踪文件夹上的时间戳并在您调用之前更新它collectfiles 是最好的(请注意,正确的记录时间是在调用 collectfiles 之前,否则如果在 collectfiles 调用期间或之后立即添加文件,您将面临无法唤醒的风险。

      【讨论】:

      • 链接总是有帮助的,但这种好的建议非常棒。非常感谢您的意见。
      【解决方案3】:

      您特别要求在 VB 中运行某些东西并在 win98 上运行,但我对此没有答案,但 MS 有一个 c/win32 示例,说明如何使用FindFirstChangeNotification 在 Windows2000+ 上实现此目的。另一件事是,.NET 中的“FileSystemWatcher”显然在 Win98 上不起作用/不受支持。我的观点是什么?对此可能没有简单的解决方案,您必须自己想出一些办法。

      【讨论】:

        猜你喜欢
        • 2011-04-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-21
        • 2014-05-17
        • 2014-11-17
        • 2013-02-22
        • 1970-01-01
        相关资源
        最近更新 更多