Vinzenz Mai: Befehl zum Vergleich von Dateien im Netzwerk

Beitrag lesen

Hallo Peter,

Nachtrag: Fehlerabfragen

Wenn ja, fehlt noch die Hälfte:

  • betrachte Datei A (gib Fehlermeldung, wenn nicht vorhanden)
  • betrachte Datei B (gib Fehlermeldung, wenn nicht vorhanden)
  • vergleiche die Werte  (gib Fehlermeldung, wenn nicht möglich)
  • schreibe das Vergleichsergebnis hin und biete entsprechende Auswahlmöglichkeiten

packen wir das in eine VB-Script-Funktion:

' getStatusFile
' ---------------------------------------------------------------------------
' Übergabe:
'    localFileName  Zeichenkette, vollständiger Pfad zur lokalen Datei
'    remoteFileName Zeichenkette, vollständiger Pfad zur Datei auf dem Server
'    fso            Objekt, gültiges FileSystemObject
' ---------------------------------------------------------------------------
' Rückgabe:
'    0          beide Dateien existieren und werden als gleich betrachtet
'               d.h. haben den gleichen letzten Änderungszeitpunkt
'    1          lokale Datei existiert nicht
'    2          auf dem Server gespeicherte Datei existiert nicht
'    3          beide Dateien existieren nicht
'    4          lokale Datei ist neuer als auf dem Server gespeicherte
'    8          lokale Datei ist älter als auf dem Server gespeicherte
'   -1          ein Fehler ist aufgetreten
' ---------------------------------------------------------------------------
' Aufgabe:
'    ermittelt den Status einer bestimmten Datei, die lokal und auf dem
'    Server gespeichert vorliegen soll.
' ---------------------------------------------------------------------------
Function getStatusFile(localFileName, remoteFileName, fso)
  Dim localFile         ' File-Objekt für die Datei auf dem Arbeitsrechner
  Dim remoteFile        ' File-Objekt für die Datei auf dem Server

' Initialisiere den Rückgabewert
  ' In VB-Script heißt die Rückgabevariable genauso wie die Funktion
  getStatusFile = 0

' Schalte die Fehlerbehandlung ein
  ' Anmerkung: VB-Script unterstützt nur On Error Resume Next
  '            Uns interessiert nur, ob überhaupt ein Fehler aufgetreten ist.
  '            Daher prüfen wir das Err-Objekt erst am Funktionsende
  On Error Resume Next

' Prüfe die Existenz der lokalen Datei
  If Not (fso.FileExists(localFileName)) Then
    getStatusFile = 1
  End If
  ' Prüfe die Existenz der auf dem Server gespeicherten Datei
  If Not (fso.FileExists(remoteFileName)) Then
    getStatusFile = getStatusFile + 2
  End If
  ' Falls eine oder beide Dateien nicht existieren, sind die weiteren
  ' Prüfungen gar nicht möglich
  If (getStatusFile > 0) Then Exit Function

' Beide Dateien existieren, prüfe Änderungsdaten
  Set localFile  = fso.GetFile(localFileName)
  Set remoteFile = fso.GetFile(remoteFileName)

' Prüfe, welche der Dateien zuletzt geändert wurde
  If (localFile.DateLastModified > remoteFile.DateLastModified) Then
    getStatusFile = 4
  ElseIf (localFile.DateLastModified < remoteFile.DateLastModified) Then
    getStatusFile = 8
  ' Else ist im Prinzip überflüssig, weil der Else-Zweig bedeutet, dass
  ' die Dateien gleichalt sind und die Rückgabevariable derzeit sowieso
  ' genau den diesem Fall entsprechenden Wert besitzt.
  Else
    getStatusFile = 0
  End If

' Prüfe, ob ein Fehler aufgetreten ist
  If Err <> 0 Then
    getStatusFile = -1
    Err.Clear
  End If
End Function

Testaufruf:

' Verglichen wird die Datei
  '     test.txt
  ' im lokalen Verzeichnis
  '     C:\Test\   ' und in der Freigabe
  '     \Server\Freigabe

Dim fso, file, local, remote, result

Set fso = CreateObject("Scripting.FileSystemObject")
  file = "test.txt"
  local = "C:\Test"
  remote = "\Server\Freigabe"

MsgBox getStatusFile(local & file, remote & file, fso)

Danach:

- Schreibe das Resultat in ein dafür vorgesehenes Element Deiner HTA,
 - Werte Resultat aus und zeige den Status mit ein paar netten Icons an
 - Erweitern auf eine Dateiliste. Nutze dazu ein Array.
 - Benutzer kann lokales Verzeichnis und Serververzeichnis auswählen,
 - Baue eine "Reparieren"-Schaltfläche ein, die die Reparatur vornimmt,
   falls möglich.
 - ...

Freundliche Grüße

Vinzenz