Entwickler-Ecke
Dateizugriff - Programm mit automatischer Ordnerüberwachung?!
Silke - Di 18.02.03 09:49
Titel: Programm mit automatischer Ordnerüberwachung?!
Hallo.
Ich möchte/muß ein Programm schreiben,mit dem der User seine Bilder verwalten kann. Der User soll dabei auswählen können, welche Ordner vom Tool verwaltet werden sollen. Er gibt so zum Beispiel in ein Formular "C:\EigeneDateien\EigeneBilder" und "C:\Bilder" ein. Dann soll das Programm diese Ordner anzeigen (so wie im Explorer) und überwachen ob sich in diesen Ordnern etwas verändert hat.(Ob ein Bild dazugekommen ist, ob ein Bild gelöscht wurde).
Hat jemand so etwas schon programmiert oder hat eine Idee, wie man so etwas machen kann?
Wäre nett, wenn mir jemand dabei helfen könnte.
Gruß,Silke
Anonymous - Di 18.02.03 13:42
Zwei TStringList brauchst du dafür. In Alt-StringList sind alle Datten bis jetzt. In Aktuell-StringList liest du alle 5 Sekunden die Liste neu ein. Dann vergleichst du einfacht:
Quelltext
1: 2: 3: 4:
| if Alt.Text <> Aktuell.Text then begin Alt.Text := Aktuell.Text; //... mach was end; |
Wie liest man jetzt die Daten ein? Guck dir den Tip 08 an:
http://mitglied.lycos.de/popov3/pub/topten/index.html
DelphiNoob - Di 18.02.03 14:39
Hi,
ich brauch für ein andere projekt auch Stringlisten, und du sagst alle 5 Sekunden einlesen.
Nun, kein problem, aber so wie ich das sehe läuft das auf einen Timer hinaus oder? Ich hab nicht wirklich was gegen Timer, aber sie laufen nurmal in Echtzeit und belasten doch den CPU? Daher gibts ne mönglichkeit darauf zu verzichten?
Tino - Di 18.02.03 14:54
@Silke: Die Lösung für Dein Problem: FindFirstChangeNotification. Habe gerade versucht ein kleines Beispiel auf meiner Platte zu finden. Hab aber leider keins gefunden. Such einfach mal beim Google unter dem Begriff FindFirstChangeNotification.
Gruß
TINO
foxy - Di 18.02.03 15:21
das mit den stringlisten ist doch eine gute idee .... aber nicht mit der 5 sec intervall
ich würde die ordner immer checken, bei .... ka. Programmstart oder Buttonclick ... dies verhindert dann die Auslastung
die alte Stringlist würde ich in einer .ini ablegen, damit du die werte bei programmende auch noch behälst ....
wäre mein Vorschlag...
die Function von Tino kenn ich nicht aber die würde ich mir auch mal noch anschauen...
:wink2:
P.S.: Willkommen im Board 8)
smiegel - Di 18.02.03 15:29
Hallo silke,
solltest Du D7 Prof. (evtl. auch D6 Prof.) haben, dann schau Dir einmal im Reiter "Beispiele" die Komponente "ShellChangeNotifier" an.
Wenn nicht, dann würde ich auf jeden Fall die Lösung von Tino bevorzugen. Der Abgleich mit Stringlisten ist totaler Blödsinn.
Silke - Mi 19.02.03 15:47
Hallo ihr!
Ich bin bis jetzt leider noch nicht dazugekommen eure Vorschläge auszuprobieren :-( Ich wollt mich nur mal wieder melden.;-)
@smiegel: Ich hab leider nur Delphi 5 prof. Und wieso ist der Abgleich mit Stringlisten totaler Blödsinn?
@all: Ich habe bis jetzt ein Klasse TSamlung,eine Klasse TSammlungsverwalter(hier sind Prozeduren wie lösche_Sammlung, kreiere_Sammlung..) , eine Unit mit dem Hautformular (hier sollen die Ordner angezeigt werden) und eben noch ein Unit mit Eingabeformular (hier kann man die gewünschten Ordner eingeben.)
Ein Objekt der Klasse TSammlung enthält den Sammlungsnamen, die beteiligten Ordner, die beteiligten Dateien....außerdem enthält die Klasse noch Methoden wie get_Sammlungsname....etc. Ich hatte jetzt vor die
Daten bzw. das Sammlungsobjekt per Stream abzuspeichern. Ist das Blödsinn? Soll ich lieber keine Klasse TSammlung machen, sondern die ganzen Daten in eine ini schreiben? Da ich sonst nur Java kann, ist mir das mit den Klassen eigentlich lieber. Aber geht das auch so?
Ich hab doch keine Ahnung - leider
Viele Grüße,Silke
smiegel - Mi 19.02.03 20:28
Hallo,
@Silke:
Wenn Du eine Bildersammlung mit 1000 und mehr Bildern über mehrere Verzeichnisse hast, ist Dein Programm nur noch mit Stringlistenabgleich beschäftigt und hätte sonst nichts anderes zu tun. Deshalb meinte ich Blödsinn.
Moderiert von
Tino: Absatz entfernt.
Anonymous - Mi 19.02.03 21:17
Zurück zu der StringList Methode. Ich behaupte nicht, daß es keine bessere gibt. Wenn ich als überwachendes Verzeichnis "c:\" eingebe, dann ist es Blödsinn. Dann ist das Programm die ganze Zeit am einlesen. Das ist aber nicht so wenn du ein normales Unterverzeichnis überwachst. Auch sind die 5 Sekunden nur eine Hausnummer. Jeder muß selbst wissen wie Aktuell es sein soll.
Das Prinzip ist aber einfach. Das Ergebnis ist, daß man einfach nur zwei Strings vergleicht. Man kann auch nur die Bytes zehlen und zwei Integer vergleichen. Ich habs die Methode zwar nicht für diesen Zweck gebraucht, aber ich hab diese Methode schon angewand um zu prüfen ob es eine Änderung gegeben hat.
Moderiert von
Tino: Absätze entfernt.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!