![]() |
Dateiendung Überwachen ??
Hie brauche dringend Hilfe. Ich habe sehr wenig Erfahrung mit Delphi muss aber hier schnell zu einer Lösung kommen.
Weiß einer von euch vielleicht wie und ob man das machen kann. Wenn möglich bitte mit einem Beispielcode damit ich es irgendwie nachvollziehen kann. Also…. Ich möchte in einem Verzeichnis (und dessen Untervezeichnissen) die Änderung von bestimmten Dateiendungen überwachen. Also in den besagten Verzeichnissen werden z.B. Dateien mit der Endung „.pob“ oder „.cdb“ abgelegt. Diese werden in dem Moment wo sie von einem Programm erfasst werden in „.bel“ umbenannt. Das ganze muss in einem Zeitram von ca. 5 Minuten nach Dateierstellung passiert sein. Also um genau zu sein: .pob muss spätestens nach 5 min. in .bel umbenannt werden .cdb muss spätestens nach 3 Stunden in .bel umbenannt werden Wenn das nicht der Fall ist muss eine Meldung ausgegeben werden. (ZB: xxxx.pob im Verzeichnis xxxxx wurde nicht verarbeitet) Zusätzlich muss in einem den besagten Verzeichnissen mindestens alle 8 Stunden eine oder mehrere „.cdb“ Dateien neu angelegt worden sein. Wenn nicht muss auch hier eine Fehlermeldung ausgegeben werden. Ein weiteres Problem ist, das wenn z.B. nach 5 min. eine „pob“ nicht umbenannt wurde, das die Fehlermeldung auch nur einmal ausgegeben wird und nicht alle 5 Minuten wieder. Dabei soll das Programm aber weiter laufen um mögliche andere fehlerhafte Dateien auch finden und Melden zu können. Danke |
Re: Dateiendung Überwachen ??
Mach das ganze mit einem Timer: Beim Starten Enabled auf True setzen, Interval auf 300000 (ms, entsprechen 5 Minuten), und in der OnTimer-Routine überprüfen ob alle Dateiendungen .bel sind (verwende dafür FindFirst, FindNext, FindClose und ExtractFileExt). Für das Problem mit der Messagebox verwende eine Boolean-Variable. Du musst hier mit einigen Timern arbeiten, aber möglich ist es auf alle Fälle.
|
Re: Dateiendung Überwachen ??
Hi Alcaeus
Das ist leider nicht ganz so einfach wie du es beschreibst. Wenn ich einfach alle 5 min. prüfe ob alle Dateien *.bel sind, gibt es sofort einen Fehler da es ja wie gesagt sein kann das Dateien bis zu 5 min. mit *.pob im Verzeichnis stehen können. Ein Beispiel. Die Dateien werden gruppenweise nacheinander erzeugt und auch nacheinander abgearbeitet. Wenn jetzt das erzeugen der Daten etwas schneller geht (das ist in der Regel so), wie das abarbeiten, laufen einige *.pob Dateien auf. Es sind pro Gruppe immer ca. 30-50 Dateien. Dann fängt eine neue Gruppe an. Das heißt wenn das System fehlerfrei durchläuft, sollte es innerhalb von ca. 3-4 min. die überhänge abgearbeitet haben. Es kommt aber leider vor das dieses Programm was die *.pob abarbeitet unbemerkt hängen bleibt. Und dann wird nicht weiter abgearbeitet. Ich hoffe ich habe das einigermaßen verständlich erklärt. Gruß Frank |
Re: Dateiendung Überwachen ??
Wie groß ist denn das zu überwachende Verzeichnis - also wieviele Dateien/Unterverzeichnisse sind dort drin?
Du kannst ja auch jede Minute diese Entsprechenden Dateien suchen und z.B in ein Array schreiben und diesees Array dann 4 Minuten Später nochmal abarbeiten und die Dateien umdenennen Also einen Timer (intervall=6000): * Dateien im Array_3 umbenennen (... nach '.bel') * Array_2 nach Array_3 kopieren * Array_1 nach Array_2 kopieren * Dateien Suchen und in Array_1 schreiben * (so werden alle Dateien nach 3 bis 3,9999... Minuten bearbeitet) * (wenn eine Datei nicht umbenannt werden konnte, so wird es nach einer Minute nochmal versucht) * ... Es gibt auch 'ne Möglichkeit Verzeichnisse zu überwachen (da bekommt dann das eigene Programm 'ne Meldung, das ich im überwachten Verzeichnis was geändert hat. - allerdings muß das Verzeichnis, soweit ich weiß, dennoch selber auf Änderungen untersucht werden) Aber ich denke mal, dass der obere Weg einfacher sein dürfte (das Suchen, Umbennenen u.s.w. muß nur in weniger als einer Minute abgeschlossen sein, aber das dürfte ja eh nicht sooo lange dauern) Das/Beim Umbenennen: z.B. ein Memo mit 'nem Label (Caption="Dateien, die nicht umbenannt werden konnten") drüber
Delphi-Quellcode:
FileExists ist, da in den oberen Array's die Dateien nach 3 Minuten ja in allen Arrays drin stehen, da sie ja 3 Munuten lang gefunden werden.
If FileExists(Verzeichnis + SearchRec.Name) and
not RenameFile(Verzeichnis + SearchRec.Name, ChangeFileExt((Verzeichnis + SearchRec.Name), '.bel')) Then Begin {nachfollgendes nur, wenn eine Datei nicht umbenannt werden konnte} Memo1.Lines.Add(TimeToStr(Now) + ' ' + Verzeichnis + SearchRec.Name'); // Uhrzeit + Dateiname eintragen Beep; // das Proggramm gibt 'nen Ton (Beep) von sich End; Also das die Dateien auch nochmal drin sind, nachdem sie umbenannt wurden und somit eigentlich nicht mehr unter diesem Namen existieren. (Mann könnte zwar abfragen, ob die Datei noch nicht in einem anderen Array drin ist und diese dann nichtmehr eintragen) Aber das hat auch den Vorteil, das bei einem Fehler (wenn z.B. die Datei vorher nicht umbenannt werden konnte) immer wieder (jede Minute) versucht wird, diese umzubennen. |
Re: Dateiendung Überwachen ??
@himitsu
Ich glaub du hast da was falsch verstanden....er will die Dateien nicht UMBENENNEN sondern nur prüfen ob sie Umbenannt worden sind :) Wie alcaeus schon sagte mit einem Timer die Dateien via FindFirst/FindNext holen. Anschließend die *.pob-Dateien prüfen ob es eine entsprechende *.bel-Datei gibt Wenn Nein Uhrzeit (im Searchrec) mit der aktuellen Uhrzeit vergleichen. Wenn größer 5 Min dann Fehler:) Das gleiche Spiel mit den *.cdb-Dateien nur in einem größeren Intervall. |
Re: Dateiendung Überwachen ??
Hallo,
wenn das Umbenennen automatisch erfolgt, und Du nur ein Ereignis möchtest, wenn das passiert, dann benutze die Funktion ReadDirectoryChangesW(). Auf Torry.Net gibt es eine Kompo mit Demo dazu: ![]() [EDIT] ReadDirectoryChangesW() funkt nur ab WindowsNT! [/EDIT] |
Re: Dateiendung Überwachen ??
:wall: Wenn das stimmt, dann halt das Verzeichnis überwachen, ist besser, als ständig zu prüfen
Siehe z.B. APP's Link. |
Re: Dateiendung Überwachen ??
Moin Zusammen,
und um Armins Vorschlag zu ergänzen: Statt ![]() ![]() |
Re: Dateiendung Überwachen ??
Hi @all
Ihr seit echt klasse!! :thuimb: :thuimb: Schön das ihr so bei der sache seit. Wie gesagt habe ich so gut wie keine Erfarhrung mit der Delphiprogrammierung. Ich werde aber mal den von euch bereit gestellten Links folgen und sehen ob ich daraus schlau werde. Vielen Dank für eure Hilfe. Ihr hört von mir!! Gruß Baba |
Re: Dateiendung Überwachen ??
Hi nochmal.... :gruebel: :gruebel:
Also das beispiel auf Torry.net war schon ganz beeindruckend. Das bringt mich aber alles leider nicht weiter. Kann mir vielleich mal einer ein praktisches Beispiel coden? :duck: Wie gesagt, ich verstehe leider noch nicht so viel von Delphi. Übrigens läuft das ganze auf Win2000! Ich habe schon mal versucht ein wenig mit dem Erstell-und Änderungsdatum der Dateien zu exprimentieren. Leider auch erfolglos. Dazu bin ich wohl noch zu unerfahren. PS: Danke für euer Interesse :hello: Gruß Baba |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:18 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz