AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Dateiendung Überwachen ??

Ein Thema von celinaw · begonnen am 2. Apr 2004 · letzter Beitrag vom 3. Apr 2004
Antwort Antwort
Benutzerbild von celinaw
celinaw

Registriert seit: 2. Apr 2004
162 Beiträge
 
#1

Dateiendung Überwachen ??

  Alt 2. Apr 2004, 01:59
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
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#2

Re: Dateiendung Überwachen ??

  Alt 2. Apr 2004, 05:43
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.
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von celinaw
celinaw

Registriert seit: 2. Apr 2004
162 Beiträge
 
#3

Re: Dateiendung Überwachen ??

  Alt 2. Apr 2004, 07:59
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

Re: Dateiendung Überwachen ??

  Alt 2. Apr 2004, 09:07
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:
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;
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.
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.
$2B or not $2B
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#5

Re: Dateiendung Überwachen ??

  Alt 2. Apr 2004, 09:38
@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.
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
Benutzerbild von APP
APP

Registriert seit: 24. Feb 2003
Ort: Graz (A)
705 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Dateiendung Überwachen ??

  Alt 2. Apr 2004, 10:18
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: http://www.torry.net/vcl/filedrv/not...monitoring.zip

[EDIT]
ReadDirectoryChangesW() funkt nur ab WindowsNT!
[/EDIT]
Armin P. Pressler

BEGIN
...real programmers are using C/C++ - smart developers Delphi;
END;
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#7

Re: Dateiendung Überwachen ??

  Alt 2. Apr 2004, 12:47
Wenn das stimmt, dann halt das Verzeichnis überwachen, ist besser, als ständig zu prüfen

Siehe z.B. APP's Link.
$2B or not $2B
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Dateiendung Überwachen ??

  Alt 2. Apr 2004, 18:27
Moin Zusammen,

und um Armins Vorschlag zu ergänzen:
Statt Hier im Forum suchenReadDirectoryChangesW könnte man auch Hier im Forum suchenFindFirstChangeNotification usw. verwenden, wenn das Ganze nicht unter einem NT-basierten System laufen soll.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von celinaw
celinaw

Registriert seit: 2. Apr 2004
162 Beiträge
 
#9

Re: Dateiendung Überwachen ??

  Alt 3. Apr 2004, 00:39
Hi @all

Ihr seit echt klasse!!

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
  Mit Zitat antworten Zitat
Benutzerbild von celinaw
celinaw

Registriert seit: 2. Apr 2004
162 Beiträge
 
#10

Re: Dateiendung Überwachen ??

  Alt 3. Apr 2004, 03:16
Hi nochmal....

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?
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

Gruß Baba
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz