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