Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Ordner überwachen (https://www.delphipraxis.net/62272-ordner-ueberwachen.html)

PierreB 2. Feb 2006 10:02


Ordner überwachen
 
Moin,

ein Bekannter von mir hat da ein kleines Problem, wobei ich ihm auch nicht helfen konnte:

Es soll ein spezieller Ordner überwacht werden, ob neue Dateien dem Ordner hinzugefügt werden. Wenn man z.B. eine Datei herunterläd und diese in dem speziellen Ordner gespeichert wird, soll das Programm entsprechend darauf reagieren. Nur wie kann man abfangen ob eine neue Datei dem Ordner hinzugefügt wird ? Wir kamen erst auf die Lösung mit einem Timer ständig die Dateianzahl in diesem Ordner zu prüfen, doch das ich bestimmt keine sehr elegante Lösung oder ?

Hat jemand ne Idee wie man das machen könnte ?

Danke,

em-sigma 2. Feb 2006 10:29

Re: Ordner überwachen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi PierreB,

es gibt ein kleines Progrämmchen (watch_it.exe), das genau das macht, was Du möchtest.
Es überwacht einen angegebenen Ordner, ob eine Datei mit einem bestimmten Namen existiert. Ist diese Datei vorhanden, dann wird eine weitere Datei aufgerufen.

Syntax:
watch_it.exe Zu_Überwachender_Ordnername Auftauchende_Datei Auszuführendes_Programm

Beispiel:
watch_it MeinOrdner download.ctl DoIt.exe

Die Datei download.ctl ist eine (sehr kleine) Datei, die erst erzeugt werden sollte, wenn die große Datei, mit der etwas gemacht werden soll, vollständig vorhanden ist. Sonst kann es zu sehr unschönen Effekten kommen.

DoIt.exe kann dann ein Programm sein, das die eigentliche Datei behandelt. Auf jeden Fall sollte zuerst die Datei download.ctl gelöscht werden.

Ich hoffe es hilft,

Grüße, em-sigma

PierreB 2. Feb 2006 10:34

Re: Ordner überwachen
 
Moin em-sigma,

irgendwie versteh ich nicht was dieses Programm macht.

Zitat:

Es überwacht einen angegebenen Ordner, ob eine Datei mit einem bestimmten Namen existiert.
Das möcht ich ja gar nicht, ich möchte das ein Ereignis aufgerufen wird wenn eine neue Datei mit beliebigen Namen in diesem Ordner existiert. Oder hab ich da jetzt was falsch verstanden ?

Du hast nicht zufällig den Sourcecode von diesem Programm (wenn es das macht was ich möchte), denn wir wollen das selbst in unser Programm mit einbauen.

Trotzdem schonmal danke. ;)

zer00 2. Feb 2006 12:44

Re: Ordner überwachen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Was muss geschehen, wenn eine Datei gespeichert wird?
Muss eine MessageBox auf Popen?

In Delphi gibts eine Komponente, leider bin ich mir nicht mehr sicher wie diese heisst.
Ich glaube etwas wie ShellNotification oder so.
Wenn das aber auch nicht geht versuchs mit GPO's
Windows kann das auch von haus aus.
Leider musst Du dann noch im EventLog nach einträgen suchen.

Christian Seehase 2. Feb 2006 17:39

Re: Ordner überwachen
 
Moin Pierre,

für Dich kommen da eigentlich (in der Hautpsache) zwei Funktionen in Frage:
Hier im Forum suchenReadDirectoryChangesW / MSDN-Library durchsuchenReadDirectoryChangesW und
Hier im Forum suchenFindFirstChangeNotification (und zugehörige Funktionen) MSDN-Library durchsuchenFindFirstChangeNotification

Schau sie Dir doch einmal an, um zu entscheiden, welche besser passt.
ReadDirectoryChangesW funktioniert z.B. nur auf NT-basierten Systemen, ist dafür aber auch "mitteilsamer" als die andere Variante.

PierreB 3. Feb 2006 09:41

Re: Ordner überwachen
 
Moin,

erstmal danke an alle, ich werd mir das mal in Ruhe angucken. :-)

RavenIV 4. Feb 2006 16:28

Re: Ordner überwachen
 
Liste der Anhänge anzeigen (Anzahl: 1)
dafür gibt es verschiedene Komponenten, die das können.
bei den Jedi's ist was dabei.
von Rx gibt es die auch.
ich benutze die Komponenten von JUAN CARLOS MOLINOS MESA, die ist recht elegant.
ich hänge sie mal als Attachement mit dran.

hier meine Kurzanleitung:
- Komponente installieren
- DirMonitor auf das Formular setzen
- im Objektinspektor die Eigenschaften und Ereignisse setzen
- im Quellcode geeignet darauf reagieren
Delphi-Quellcode:
// wird aufgerufen, wenn sich das Verzeichnis ändert
procedure TmyForm.DirMonitorChange (sender: TObject; Action: TAction; FileName: string);
begin
  if pos ('myFile.ext', FileName) <> 0 then // ist es das richtige File?
  begin
    myProcedure(...);
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:49 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 by Thomas Breitkreuz