Thread readdir -> Änderungen im Verzeichnis (12 answers)
Opened by Cappu at 2009-08-13 21:50

sid burn
 2009-08-14 12:50
#124229 #124229
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
Was möchtest du den genau machen? Also der einzige Sinnvolle weg sicherzustellen das eine Datei auch existiert ist sie einfach zu öffnen und den Rückgabestatus zu nutzen. Sagen wir du gehst eine Liste von Dateien durch.

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
while ( my $file = readdir $dh ) {
    eval {
        open my $fh, '<', $file  or  die $!;
        ### tue etwas mit der datei
        close $fh  or  die $!;
    };
    if ( $@ ) {
        warn "Fehler bei Bearbeitung der Datei $file: $!\n";
    }
}


Daher hier wird die Datei geöffnet etwas mit der datei gemacht, und wieder geschlossen. Sollte es ein fehler geben, z.b. beim öffnen wird eine warnung ausgegeben, aber trotzdem mit der nächsten Datei fortgefahren.

Ob du nun eine warnung ausgiebst das programm direkt abbrechen lässt etc. hängt dann davon ab was du genau erreichen möchtest.

Quote
ich bin noch am überlegen wie ich dies genau umsetze, da ich eigentlich recht gern eine art fifo umsetzen wollte. allerdings habe ich die befürchtung das eine sortieren nach erstelldatum recht i/o bzw. cpu lastig werden wird (bei vielen files und ständigen neuen "nachschauen" nach neuen files)....

Du meinst ein FIFO auf Dateiebene? Also es werden drei neue Dateien, A, B, C in dieser reihenfolge erstellt, also möchtest du erst A, dann B und dann Datei C bearbeiten?

Ich weiß nicht wie deine Umgebung genau ausschaut, allerdiengs wäre eine Kommunikation der prozesse untereinander z.B. eine Möglichkeit, Daher programm X legt datei an, und sendet Programm Y eine notification das eine neue Datei erzeugt wurde, und gibt den pfad zusätzlich an.

Ein weiterer weg du, nutzt einfach eine kleine Textdatei. Programm X schreibt am ende einfach pro zeile immer den Dateinamen herein der gerade erzeugt wurde. Und Programm Y liest immer zeilenweise diese datei aus. Gleiche prinzip wie oben nur eben über eine Textdatei.

Oder du benennst die dateien eben so durch das sie vom namen her immer sortiert sind. Also z.B. am anfang der datei ein datum einfügen. "20090814" dann werden neue dateien immer zuletzt angezeigt.

Ansonsten wenn du Linux nutzt kannst du z.B: noch "inotify" nutzen. Daher das nachschauen und auslesen der dateien machst du nur dann wenn du auch ein event bekommst das eine neue datei erzeugt wurde, ansonsten wartest du halt solange.
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de

View full thread readdir -> Änderungen im Verzeichnis