Einzelnen Beitrag anzeigen

Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#3

AW: Zugriff mehrerer User auf eine Datei

  Alt 6. Jul 2013, 09:00
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:
var
  fs : TFileStream;
begin
  fs := TFileStream.Create('N:\userlist.dat', fmOpenReadWrite or {alle dürfen lesen/schreiben}fmShareDenyNone);
  try
  finally
    fs.Free;
  end;
end;
Das Problem ist jetzt, dass mehrere Prozess gleichzeitig die Datei verändern können.
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.
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.
fork me on Github

Geändert von sx2008 ( 6. Jul 2013 um 09:16 Uhr)
  Mit Zitat antworten Zitat