Вопрос

Условия:

  • Windows 98 SE
  • WMI недоступен

У меня есть код, который выглядит следующим образом, написанный с использованием моей стероидной упаковки VBScript с использованием MSScript.

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*.

Shchangenotifyрегистр:Получать уведомления Об изменении оболочки

Функция SHChangeNotifyRegister Функция SHChangeNotifyDeregister ( обмен )

Существует другое решение, использующее ReadDirectoryChangesW читать здесь:

VB6 WinAPI ReadDirectoryChangesW для чтения (проверьте 5-й пост от Янг Кок Ва)

Вы специально просили что-то в VB и работающее на win98, и у меня нет ответа на это, но у MS есть пример c / win32 о том, как добиться этого на Windows2000 + с FindFirstChangeNotification Найти первое изменение.Другое дело , что , по - видимому "Просмотр файловой системы" в .NET не работает / не поддерживается на Win98.К чему я клоню?Возможно, для этого нет простого решения, и вам придется придумать что-то самостоятельно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top