![]() |
Zugriff mehrerer User auf eine Datei
Hallo an alle Spezialisten,
vielleicht hat jemand eine gute Idee. Ich möchte, dass ein Zugriff auf eine Datei im Netzwerk (Zugriff schreibend, lesend) von mehreren Usern gleichzeitig möglich ist. Sicherlich könnten jetzt Vorschläge kommen, das ganze sicher über eine Datenbank zu realisieren. Diese Option sollte wirklich nur das allerletzte Hintertürchen sein, falls es wirklich nicht anders zu lösen ist. In die Datei (ähnlich vielleicht wie bei einer *.ini) werden nur Benutzername und ein Wert geschrieben. Dieser Wert soll dann über die Anwendung gepollt und allen anderen Nutzern angezeigt werden (vergleichbar mit einer Highscore-Liste). Bin über jeden geistigen Eisprung dankbar. LG, Jean |
AW: Zugriff mehrerer User auf eine Datei
Ich würde eine Datenbank mit embedded Zugriff verwenden, wie z.B. FireBird embedded, SQLite, MSSQL compact, ...
Du brauchst so kein DBMS installieren und brauchst dich trotzdem nicht um dir notwendige Synchronisierung des Dateizugriffs zu kümmern. |
AW: Zugriff mehrerer User auf eine Datei
Das ist eigentlich kein Problem; du muss nur angeben, dass die zentrale Datei von allen Prozessen zum Lesen und zum Schreiben geöffnet werden darf:
Delphi-Quellcode:
Das Problem ist jetzt, dass mehrere Prozess gleichzeitig die Datei verändern können.
var
fs : TFileStream; begin fs := TFileStream.Create('N:\userlist.dat', fmOpenReadWrite or {alle dürfen lesen/schreiben}fmShareDenyNone); try finally fs.Free; end; end; Du brauchst innerhalb der Datei eine Struktur, die verhindert das Prozess B das überschreibt was Prozess A gerade reingeschrieben hat. Es gibt auch noch einen zweiten, sicheren Weg. Hierbei darf immer nur ein Prozess auf die Datei zugreifen.
Delphi-Quellcode:
fs := TFileStream.Create('N:\userlist.dat', fmOpenReadWrite or fmShareExclusive);
Das Prinzip geht so: ein Prozess öffnet die Datei exklusiv, liest den ganzen Inhalt und schreibt seinen Score und schliesst die Datei wieder. Zwischen Öffnen und Schliesen sollte möglichst wenig Zeit vergehen. Wenn eine Datei schon in Bearbeitung ist kann ein weiterer Prozess diese solange nicht öffnen. Mit einem Timer versucht man es einfach mehrfach, bis man Erfolg hat. Erfahrungswerte: das Prinip der exklusiv gesperrten Datei funktioniert gut auch bei 50 Rechner. Bei voller Netzwerkauslastung kann ein Prozess aber auch schon mal 2 Sekunden blockiert sein, weil die Datei ständig von anderen Prozess geöffnet ist. |
AW: Zugriff mehrerer User auf eine Datei
Hallo,
vielen Dank für Eure Antworten. Ich werde mich auf jeden Fall mit beiden Themen beschäftigen. Danke für die Tipps. LG, Jean |
AW: Zugriff mehrerer User auf eine Datei
Zitat:
Fazit: Das ist keine brauchbare Lösung. |
AW: Zugriff mehrerer User auf eine Datei
Zitat:
|
AW: Zugriff mehrerer User auf eine Datei
Zitat:
Besser wäre hier doch ein Server, der von allen erreichbar ist, oder eine Access-Datenbank, die kann man sogar auf einem Fileserver oder einer Netzwerkplatte betreiben kann. Ich hab das mal bei einem Verein realisiert, der keinen Netzwerkserver hatte, sondern nur eine Netzwerkplatte. Funzt bis heute einwandfrei, obwohl ich Timer einbauen mußte, um regelmäßig gewisse Tabellen abzufragen. Das macht aber bis heute so wenig Last, daß sich noch keiner beschwert hat. |
AW: Zugriff mehrerer User auf eine Datei
Zitat:
Zitat:
Zitat:
Zitat:
|
AW: Zugriff mehrerer User auf eine Datei
Zitat:
Zitat:
Zitat:
Wie gesagt, es funktioniert jetzt bereits seit über drei Jahren ohne Probleme. Zitat:
|
AW: Zugriff mehrerer User auf eine Datei
Bei einer Highscore dürftest du das Problem mit dem "dirty writing" haben, sofern derjenige, der schreibt, auch die Logik ausführt (einsortieren in die Highscore Liste). Dafür muss es einen wechselseitigen Ausschluss geben.
Für soetwas dürfte das Fassade-Pattern angebracht sein - eine Schnittstelle, die das Eintragen übernimmt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:56 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