Entwickler-Ecke
Dateizugriff - Prüfen wer Datei geöffnet hat oder "Zwangsschliessen"
Metschu - Mo 13.09.10 20:18
Titel: Prüfen wer Datei geöffnet hat oder "Zwangsschliessen"
Nabends!
Folgendes Problem:
Prog liegt auf dem Server, mehrere User greifen darauf zu.
Die Daten werden in einem TRecord File auch auf dem Server gespeichert.
Damit es keine Zugiffskonflikte auf die Daten gibt, prüfe ich mit der Funktion "isFileInUse" (aus dem Forum), ob die Datei geöffnet ist.
Die Software öffnet die Datei, schreibt daten und Schliesst sie gleich wieder.
Jetzt ist es schon mehrfach vorgekommen, das die Funktion meldet, das Datei geöffnet ist und verweigert das Speichern.
In der Software habe ich schon mehrfach nachgeschaut, die Datei wird nach dem öffnen immer geschlossen (zumindest laut Quelltext...)
Gibt es eine Möglichkeit rauszufinden, welcher User im Netzwerk diesen "Fehler" verusacht?
Oder kann ich die Datei auch von Extern "Zwangsschliessen", um wieder drauf zugreifen zu können?
Das soll keine Entgültige Lösung sein, nur hilft es auch bei der Fehlersuche, wenn ich den User Fragen kann, was er gemacht hat um das nachzuvollziehen.
Danke schonmal.
Gruß
Torsten
Delete - Mo 13.09.10 20:47
Ich würde eine zweite Datei beim Öffnen anlegen und beim Schließen wieder löschen. Und wenn das zweite Programm die Datei öffnen will, prüft es vorher, ob die Datei existiert.
FinnO - Mo 13.09.10 21:28
Und wenn das Programm zwischendurch verreckt, Stromverbindung gekappt wird o.Ä.? Dann hat man den Salat und die Datei ist in Dauernutzung. Man müsste quasi mit Sessions arbeiten.
LG
Boldar - Mo 13.09.10 21:35
FinnO hat folgendes geschrieben : |
Und wenn das Programm zwischendurch verreckt, Stromverbindung gekappt wird o.Ä.? Dann hat man den Salat und die Datei ist in Dauernutzung. Man müsste quasi mit Sessions arbeiten.
LG |
Ich würde in die 2te Datei einfach eine Zeitangabe schreiben, und das Nutzungsrecht für T+x Sekunden vergeben. Wenn ein Programm länger braucht, muss es die Time-stamp datei refreshen.
FinnO - Mo 13.09.10 21:37
TRecord File schreit sowieso nach Datenbank ;)
Metschu - Mo 13.09.10 21:44
FinnO hat folgendes geschrieben : |
TRecord File schreit sowieso nach Datenbank ;) |
... die man auf dem Server leider nicht installieren kann... :bawling:
Oder gibts ne Variante, bei der man nichts installieren brauch?
Boldar hat folgendes geschrieben : |
Ich würde in die 2te Datei einfach eine Zeitangabe schreiben, und das Nutzungsrecht für T+x Sekunden vergeben. Wenn ein Programm länger braucht, muss es die Time-stamp datei refreshen. |
Klingt Logisch und interessant. Wäre ein Work Arround.
Zusätzlich würde mich aber noch interessieren, wer die datei "offen" hält, um das Problem entgültig zu lösen.
FinnO - Mo 13.09.10 21:47
jo. Firebird Embedded
BenBE - Di 14.09.10 01:38
Man öffne beim Windows die Systemsteuerung, wähle Verwaltung, gehe dann auf Computer - Freigegebene Ordner - geöffnete Dateien ...
Tranx - Di 14.09.10 03:58
Manchmal geschieht das auch bei mir, dass in einem Programm solche Fehlermeldungen kommen. Oft ist der Datentransfer im Netz Schuld, der Server überlastet etc.
Es ist schon vorgekommen, dass man den Server neu starten musste, um eine solches hartnäckiges Problem zu lösen.
Für den Clientzugriff auf eine Datei empfehle ich ein Try .. finally .. end Konstrukt, dass selbst bei Programmfehlern immer der finally-Teil abgearbeitet wird.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| try try Dateizugriffsroutine(n) except Fehlermeldung end finally try Datei Schließ-Routine except Fehlermeldung end end |
Dann sollte eigentlich das Ganze funktionieren, wenn Windows nicht dazwischenfunkt (s.o.).
jasocul - Di 14.09.10 07:54
Schreib doch zusätzlich eine Datei mit dem Benutzer-Namen. Dann siehst du, wer der Übeltäter ist.
Vielleicht passt die Info ja auch noch in den TRecord.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!