Problem mit FileSystemWatcher[gelöst]
-
Hi
this.Filter = ""; this.NotifyFilter = System.IO.NotifyFilters.FileName | System.IO.NotifyFilters.DirectoryName | System.IO.NotifyFilters.LastWrite; this.EnableRaisingEvents = true; this.Changed += new FileSystemEventHandler(fsw_onChanged); this.Created += new FileSystemEventHandler(fsw_onCreated); this.Deleted += new FileSystemEventHandler(fsw_onDeleted); this.Renamed += new RenamedEventHandler(fsw_onRenamed);
Obwohl der NotifyFilter auf LastWirte gestellt ist kommt es mir so vor als würder er auch auf LastAcesse reagiert. Weil wenn einen Veränderung auftritt in einer Datei Lese ich diese Datei und generierer eine md5 summe, doch hier löse ich doch kein LastWrite aus?
private void fsw_onChanged(object sender, System.IO.FileSystemEventArgs e) { ...... MD5CryptoServiceProvider aMD5; FileStream aFS = new FileStream(e.FullPath, FileMode.Open, FileAccess.Read); byte[] aBuffer; aMD5 = new MD5CryptoServiceProvider(); aBuffer = aMD5.ComputeHash(aFS); aFS.Close(); md5.Value = Convert.ToBase64String(aBuffer); ..... }
auf jedenfall kommt es zu einer Endlosschleife bzw. ich kann die datei nachher nicht mehr öffen oder umbennen oder ähnliches
Bitte um baldige Antwort, da ich heute Abgabe termin meiner Diplomarbeit habe
mfg spjoe
-
Die Anmerkung kann ich mir nicht verkneifen: wenn Du heute Abgabetermin hast, biste ja wirklich sehr früh mit einer solchen Frage dran. Soviel zum Thema "Time-Management".... Dafür würde ich die Note 6 vergeben.
Das beim Lesezugriff keine Dateiveränderung stattfindet mag richtig sein. Wenn Du aber mal eine Datei mit Notepad öffnest (und nicht speicherst) und dann im Explorer die Dateieigenschaften ankuckst, wirste sehen, daß Windows sich sehr wohl merkt, wann zuletzt auf die Datei zugegriffen wurde. Ich bin kein Experte in NTFS-Belangen. Vermutlich ist das aber der Grund, weshalb Dein Ereignis doch ausgelöst wird. Ob diese Info "an der Datei" hängt oder im zugehörigen Directory, weiß ich nicht... Vielleicht kann das ein Wissender sagen.
Aber die Beschreibung von Changed in WatcherChangesTypes in MSDN sagt ja:
Die Änderung einer Datei oder eines Ordners. Es gibt u. a. folgende Arten von Änderungen: Änderungen an der Größe, an Attributen, an den Sicherheitseinstellungen und am Zeitpunkt des letzten Schreibvorgangs bzw. des letzten Zugriffs.
Als Diplomant sollte man sich solche Informationen aber selber erarbeiten können...
Mir fällt aber eine recht simple Idee ein, um das Problem der rekursiven Ereignsiauslösungen zu verhindern: bevor Du in der Ereignisbehandlung selber an der Datei herumgräbst, klemme doch temporär einfach die Ereignisbehandlung ab und aktiviere sie wieder, wenn Du fertig bist.
Dann entsteht allerdings eine Überwachungsloch... Wenn das ein Problem ist, dann setze ein "Flag" ein: speicher den Dateinamen in einer Liste und mach Deine Bearbeitung. Bevor Du Dir die Datei aber merkst, prüfst Du, ob der Dateiname in Deiner Liste vorhanden ist. Falls ja, ist eine Überprüfung unnötig und Du beendest das Event.
Obwohl ich kein Diplom habe: hab ich jetzt auch ein Diplom verdient?
-
Danke für Antwort habs aber anders gelöst
mfg spjoe
-
Na und wie?
-
Jo einfach anders halt
-
Gut das Du gefragt hast...