Lesen einer Datei + Prüfung

Alles rund um die Programmierung mit Qt
Antworten
anno1988
Beiträge: 280
Registriert: 23. Januar 2009 20:49

Lesen einer Datei + Prüfung

Beitrag von anno1988 »

hallo,

ich habe da ein kleines problem.

Ein externens Programm schreibt mir in ein Verzeichnis Dateien. Ich prüfe mit meinem zyklisch diese Dateien ab und werte sie aus. Das soll aber erst geschehen, wenn die Dateien vollständig auf der Festplatte liegen.

Kann ich das irgendwie prüfen, wann eine Datei feritg geschreiben ist und nicht mehr vom externen Programm verwendet wird?

gruß

anno1988
RavenIV
Beiträge: 267
Registriert: 21. Januar 2009 14:24
Wohnort: Waldshut

Beitrag von RavenIV »

Bei Windows gibt es einen Mechanismus, mit dem man sich benachrichtigen lassen kann, wenn sich in einem Verzeichnis oder bei einder Datei etwas verändert.

Muss mal schauen, ob man sich da mit Qt anhängen kann.
Eigentlich ist es ne Windows-Nachricht, die vom OS gesendet wird.
Linux, das längste Text-Adventure aller Zeiten
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

Wann löst der QDirectoryWatcher denn sein Signal aus?
RavenIV
Beiträge: 267
Registriert: 21. Januar 2009 14:24
Wohnort: Waldshut

Beitrag von RavenIV »

AuE hat geschrieben:Wann löst der QDirectoryWatcher denn sein Signal aus?
Du meinst wohl QFileSystemWatcher http://doc.trolltech.com/4.2/qfilesystemwatcher.html
Linux, das längste Text-Adventure aller Zeiten
anno1988
Beiträge: 280
Registriert: 23. Januar 2009 20:49

Beitrag von anno1988 »

Hm ich weiß nicht ob diese Klasse das richtige ist.

nach der manual ist für meine problemstellugn nix dabei.
dikilroy
Beiträge: 7
Registriert: 14. Januar 2009 22:08

Beitrag von dikilroy »

Hi,

hast Du die Möglichkeit im schreibendem Programm die Datei zu sperren? Es gibt OS Funktionen die eine Datei sperren kann. Im Lesendem Prozess musst Du dann auf die Freigabe warten. Schau mal hier http://www.ecst.csuchico.edu/~beej/guide/ipc/flock.html (ist zwar C und Unix aber schonmal ein Ansatz)

Dann gibt es da noch den Semaphoren Ansatz, der über Prozessgrenzen Betriebsystem Mittel sperren kann (ähnlich dem Mutex).

Wenn das zu kompliziert ist, kann der schreibende Prozess ja auch eine ".lock" Datei schreiben (statt lock vieleicht der original Dateiname mit einem Punkt davor). Der lesende Prozess prüft ob so eine Datei vorhanden ist, und wartet solange bis die Datei gelöscht wurde.

Bei diesem Mechanismus musst Du aber den schreibenden Prozess ändern.

Wenn das nicht geht, dann wäre eine quick-dirty Lösung zu prüfen ob sich die Dateigrösse in einer gewissen Zeit noch ändert. Ist etwas fehleranfällig, aber könnte funktionieren.

Grüße
André
anno1988
Beiträge: 280
Registriert: 23. Januar 2009 20:49

Beitrag von anno1988 »

ja das stimmt, das wäre natürlich noch eine Möglichkeit. Was wahrscheinlich am besten ist, eine lock-Datei zu erzeugen und zu warten bis diese wieder gelöscht wurde, um die zu überprüfende Datei auszulesen.

Das wäre dann im Sinne von Qt auch am besten, da es dann wieder systemunabhängig ist.

Was hälst du von der idee, die Datei solange sie übertragen wird eine .lock-Endung zu geben und wenn diese vollständig übertragen wurde, wird die endung wieder entfernt bzw. die datei eben umbenannt?
dikilroy
Beiträge: 7
Registriert: 14. Januar 2009 22:08

Beitrag von dikilroy »

Was hälst du von der idee, die Datei solange sie übertragen wird eine .lock-Endung zu geben und wenn diese vollständig übertragen wurde, wird die endung wieder entfernt bzw. die datei eben umbenannt?
Natürlich auch möglich.
Hierbei ist natürlich der Hinweis aus dem Thread (http://qtforum.de/forum/viewtopic.php?t=10240) zu berücksichtigen, dass der schreibende Prozess möglicherweise abstürzt, und somit die Datei nicht löschen kann / nicht umbenennen kann.

Grüße
André

PS
Es gibt aber aber Betriebsystem Mittel! Da müsste man mal weiterforschen ...
NoRulez
Beiträge: 208
Registriert: 19. Juni 2007 15:43

Beitrag von NoRulez »

Was hältst Du von QtLockedFile.

LG NoRulez
dikilroy
Beiträge: 7
Registriert: 14. Januar 2009 22:08

Beitrag von dikilroy »

NoRulez hat geschrieben:Was hältst Du von QtLockedFile.

LG NoRulez
Dachte ich mir, dass es dazu eine Qt Klasse gibt. Hatte die nur nicht gefunden. Warum ist das denn nicht direkt in QFile drin, und warum ein Addon? Egal, offtopic!

Glaube auch das dies Dein Problem lösen könnte, unter der Voraussetzung, dass Du das externe Programm ändern kannst.

cu
André
anno1988
Beiträge: 280
Registriert: 23. Januar 2009 20:49

Beitrag von anno1988 »

Ja, das externe programm kann ich da schon verändern.

Ok, dnake für die Hilfe, ich schaue mal was ich so verwenden werden, ich habe jetzt ja ein paar Ansatzmöglichkeiten. :D :D
NoRulez
Beiträge: 208
Registriert: 19. Juni 2007 15:43

Beitrag von NoRulez »

@dikilroy: Weil es bisher als Qt Solutions nur für kommerzielle Lizenzen zur Verfügang stand.

LG NoRulez
Antworten