2009-06-21 5 views
0

Bedingungen:Erkennen, ob sich der Inhalt eines Ordners geändert hat?

  • Windows 98 SE
  • WMI nicht verfügbar

I-Code haben, der so aussieht, geschrieben meine steroidale Umwickeln von VBScript mit MSScript verwenden.

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 

Es gibt eine Menge von Plattenaktivität mit diesem Aufruf an files.collectfiles. Gibt es eine Möglichkeit, eine Änderung des Inhalts eines Ordners zu erkennen, ohne den Ordner tatsächlich nach Dateien zu durchsuchen?

Antwort

1

Definieren Sie "Änderung im Inhalt eines Ordners".

Wenn dies bedeutet, dass eine Datei hinzugefügt, gelöscht oder umbenannt wurde, wird der geänderte Zeitstempel des Ordners immer dann aktualisiert, wenn ein solches Ereignis eintritt.

Wenn Sie stattdessen wissen möchten, wann Dateien geändert werden, müssen Sie sie lesen.

Das sagte, was Sie versuchen zu tun (Scannen Sie einen Ordner für neue .usv-Dateien, und verarbeiten Sie sie und löschen Sie sie), dann nur den Zeitstempel des Ordners verfolgen und aktualisieren Sie direkt vor Ihnen call collectfiles ist am besten (Beachten Sie, dass die richtige Zeit für die Protokollierung nur VOR dem Aufruf von collectfiles angegeben wird. Andernfalls riskieren Sie, nicht aufzuwachen, wenn eine Datei während des collectfiles-Aufrufs oder unmittelbar danach hinzugefügt wird).

+0

Verbindungen immer hilfreich sind, aber diese Art von gutem Rat ist wunderbar. Vielen Dank für Ihre Anregungen. – bugmagnet

0

Sie haben speziell nach etwas in VB gefragt und laufen auf win98 und ich habe keine Antwort dafür, aber MS hat ein c/win32-Beispiel, wie man dies unter Windows2000 + mit FindFirstChangeNotification erreicht. Eine andere Sache ist, dass anscheinend "FileSystemWatcher" in .NET nicht funktioniert/unter Win98 unterstützt. Was ist mein Punkt? Es gibt vielleicht keine einfache Lösung dafür und Sie müssen sich etwas einfallen lassen.

2

Es gibt ein Beispiel, das behauptet, auf allen Versionen von Win95 bis mindestens WinXP zu funktionieren. Entwickelt unter Win98 mit VB5. Verwenden der (dann? Bereitgestellten Links zu der Doku unten) undokumentierten SHChangeNotify * -Funktionen.

SHChangeNotifyRegister: Receive Shell Change Notifications

SHChangeNotifyRegister Function SHChangeNotifyDeregister Function

Es gibt eine andere Lösung mit ReadDirectoryChangesW hier:

VB6 WinAPI ReadDirectoryChangesW (sieh 5. Beitrag von Yang Kok Wah)