0

条件:

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

4

3 回答 3

2

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

SHChangeNotifyRegister:接收外壳变更通知

SHChangeNotifyRegister 函数 SHChangeNotifyDeregister 函数

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

VB6 WinAPI ReadDirectoryChangesW(查看Yang Kok Wah 的第5 篇文章)

于 2009-06-21T17:06:01.847 回答
1

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

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

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

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

于 2009-06-21T16:39:44.410 回答
0

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

于 2009-06-21T16:49:12.383 回答