PDA

Vollständige Version anzeigen : Ständige überprüfung ob bestimmte Datei verändert wurde


schnarchzapfen
21.11.2005, 08:55
Hallo, gibt es irgend eine Möglichkeit mit der man es schafft eine Aktion ausführen zu lassen sobald eine bestimmte Log-Datei verändert wurde? Wie ich in der Hilfe zum WSH gesehen habe gibt es dort die folgende Funktion mit der man feststellen kann wann eine Datei zum letzten mal modifiziert wurde:

Function ZeigeDateizugriffsinfo(dateiAngabe)
Dim fso, f, s
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFile(dateiAngabe)
s = UCase(dateiAngabe) & "BR"
s = s & "Erstellt: " & f.DateCreated & "BR"
s = s & "Letzter Zugriff: " & f.DateLastAccessed & "BR"
s = s & "Letzte Änderung: " & f.DateLastModified
ZeigeDateizugriffsinfo = s
End Function

(Das "BR" steht normalerweise noch in <> jedoch musste ich es weglassen, da in der Codeansicht sonst vom Forum wirklich ein Zeilenumbruch eingefügt wird :) .)

Soweit sogut. Bloß wie schafft man es nun, dass die Abfrage auf "DateLastModified" ständig im Hintergrund vom System (W2K3-Server) abgeprüft wird um bei einer Änderung an der Log-Datei diese sofort in einen anderen Ordner zu archivzwecken sichern zu können :confused: ? Das Ganze sollte möglichst so realisierbar sein ohne eine ständige 100% CPU-Auslastung zu erzeugen, da es sich um einen Server handelt auf dem das Vorhaben realisiert werden soll.

Für Antworten im voraus besten Dank.

Gruß an alle.
Schnarchzapfen

~~~dexter~~~
21.11.2005, 14:43
@schnarchzapfen

Vielleicht reicht soetwas für den Anfang.

Dim fso, f, s
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFile("c:\MeineLogDatei.log")

Do
If DateDiff("h", Now, f.DateLastModified) >= 0 Then
fso.CopyFile f, "c:\Backup\"
End If
Wscript.Sleep (10000)
Loop

Gruß ~~~Dexter~~~

schnarchzapfen
22.11.2005, 15:40
Erst mal Danke für den Tipp.
Gibts eigentlich beim WSH auch den Befehl "DoEvents" !? Denn damit konnte man, wenn ich mich noch richtig erinnerne (ist schon ne ganze Weile her als ich zuletzt überhaupt etwas programmiert habe :) ), bei VBA die 100% CPU-Auslastung kompensieren oder täusche ich mich da?

Gruß Schnarchzapfen

Joachim Hofmann
23.11.2005, 16:44
Hallo,

als Softwarelösung der ständigen Überwachung (man könnte ja auch spiegeln o.ä., bischen viel wenns nur um eine Datei geht) fällt mir nur die File System Watcher Klasse in .NET ein.

schnarchzapfen
23.11.2005, 17:35
Und wie mach man das damit? Denn mit .NET kenne ich mich leider gar nicht aus. Was brauche ich alles dazu (welche Programmierumgebung etc.)?

Joachim Hofmann
25.11.2005, 13:02
Das ist es eben: man braucht (irgendeinen) .NET - Compiler : C#, VB.Net, ... und in der Tasche habe ich den Quellcode bzw. das zu erstellende .NET- Projekt auch nicht. Ich weiß nur, das es das betreffende Programmierobjekt gibt.

SWR
28.11.2005, 18:08
Hallo Schnarchzapfen,

die hier zuvor erwähnte FileSystemWatcher-Klasse sieht in Aktion so aus, wie im Anhang. Ist halt ein .NET-Programm (VB.NET) und setzt somit das .NET-Framework (1.1) auf dem Rechner voraus, auf dem es gestartet werden soll.

Es lassen sich jeweils lokale als auch Netzwerkressourcen einstellen (Quelle und Ziel).

Die zu überwachende Datei muß auf einem der folg. Systeme liegen:
WinXP, Win2000, .NET-Server, Win NT 4.0.
(Plattformabhängigkeit der FileSystemWatcher-Klasse).

Was ich NICHT abgefangen habe: wenn während der Überwachung Quelle und/oder Ziel plötzlich unerreichbar sind oder werden... überhaupt läßt sich dieses Winzig-Tool ja komplett ausbauen.....

Gruss
Stephan

(take it as it is or throw it away, no warranty)