Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Schreib-Zugriff auf Datei (https://www.delphipraxis.net/59005-schreib-zugriff-auf-datei.html)

MasterEvil 15. Dez 2005 19:44


Schreib-Zugriff auf Datei
 
Hi,

hab ein kleines Problem, für das ich keine "schöne" Lösung finde bislang.

Und zwar habe ich ein Programm, welches eine Datei öffnet, den Inhalt ausliest, dann wieder schließt.
Dann kann man Sachen an dem Inhalt ändern und irgendwann dann wieder zurück speichern.

Nun will ich, dass wenn jemand anderes in der Zeit (solange man die Datei "offen" hat) die Datei mit meinem prog öffnen will nur Lese-Rechte bekommt und nicht speichern kann, da sich die beiden ja sonst gegenseitig überschreiben.

Gibt es da gute Lösungsansätze?

Will die Datei eigentlich nicht die ganze Zeit offen halten.
Und es sollte möglichst auch ein Schutz sein, den Windows eventuell wieder selber wegbekommt (falls das Prog zum Beispiel zwischendurch abstürzt, dann würde die Datei ja Schreibgeschützt bleiben).

greetz,
Steffen

marabu 15. Dez 2005 20:32

Re: Schreib-Zugriff auf Datei
 
Hallo Steffen,

setze doch die Datei nach dem Einlesen und bis zum Zurückschreiben einfach auf ReadOnly:

Delphi-Quellcode:
uses
  SysUtils;

begin
  Memo.Lines.LoadFromFile(fileName);
  if FileIsReadOnly(fileName)
    then // tell user
    else FileSetReadOnly(fileName, true);
end;
Grüße vom marabu

MasterEvil 15. Dez 2005 22:18

Re: Schreib-Zugriff auf Datei
 
thx, die idee ist ganz gut.

Windows setzt dann zwar die Rechte nicht automatisch zurück, aber falls das Prog abstürzt kann es so trotzdem noch jeder machen :)

danke nochma,
Steffen

ichbins 15. Dez 2005 22:28

Re: Schreib-Zugriff auf Datei
 
Aber das andere Programm könnte die Datei sofort wieder zurücksetzten mit filesetreadonly(false)...

Luckie 16. Dez 2005 00:26

Re: Schreib-Zugriff auf Datei
 
Öffne die Datei exklusiv.

MasterEvil 16. Dez 2005 08:09

Re: Schreib-Zugriff auf Datei
 
@ichbins:
da mein prog das einzige ist, was die Datei öffnen kann, ist das kein problem ;)
Ist für meinen ProjectManager.

@Luckie:
Was genau heisst das?
Und wie macht mans?
:)

greetz
Steffen

marabu 16. Dez 2005 08:18

Re: Schreib-Zugriff auf Datei
 
Hallo Steffen,

exklusives Öffnen verhindert, dass ein anderer Prozess auf die Datei zugreifen kann, während du sie offen hältst. In der Online-Hilfe findest du Informationen dazu unter TFileStream.Create. Wenn du die Datei, wie in meinem Beispiel-Code, per LoadFromFile lädst, dann hast du die Datei exklusiv geöffnet und nach dem Lesen sofort wieder geschlossen.

Grüße vom marabu

MasterEvil 16. Dez 2005 08:42

Re: Schreib-Zugriff auf Datei
 
ja, das dachte ich mir schon.
Nur muss ich sie ja dann offen halten, damit das so bleibt.
Ansonsten ist das ja gleich wieder weg.

greetz
Steffen

tomsel 16. Dez 2005 09:24

Re: Schreib-Zugriff auf Datei
 
Wäre es nicht denkbar, mit einer temporären Kontrolldatei zu arbeiten, die statt der eigentlichen Datei exklusiv geöffnet wird. Dann bleibt der Zugriff auf die Datei weiterhin möglich, den Schreibschutz musst Du dabei selbst steuern.

MasterEvil 16. Dez 2005 17:44

Re: Schreib-Zugriff auf Datei
 
Ja, hatte ich auch überlegt, finde nur eine zusätzliche Datei sehr unschön.
Das soll nur eine Datei bleiben ;)

greetz
Steffen

ichbins 16. Dez 2005 17:52

Re: Schreib-Zugriff auf Datei
 
Machs einfach so dass du die Datei dierekt nach dem loadfromfile "sinnlos" öffnest:

Delphi-Quellcode:
var
  f:file;
begin
  //loadfromfile...

  assignfile(f,filename);
  reset(f);
du kannst die Datei mit closefile(f) wieder freigeben. Wenn das Programm abschmiert, macht das auch keine Probleme, da Windows dann die Datei freigibt.

tomsel 16. Dez 2005 20:20

Re: Schreib-Zugriff auf Datei
 
Ich meine, die Datei soll für andere zum lesen verfügbar sein. Ist das nach openfile noch der Fall? Übrigens, die Variante mit der zweiten Datei nutzen auch andere, sehr bekannte Programme aus dem Hause Winzigweich. Dass es Probleme mit sich bringt, sieht man dort ebenfalls oft genug. Aber mal "Butter bei die Fische": Jede neue Instanz des Programmes müsste eine solche Kontrolldatei anlegen, mit einem nach einem festgelegten Schema erzeugten, eindeutigen Namen und natürlich im selben Pfad, und diese Datei während der gesamten Laufzeit offen halten. Eine neu gestartete Instanz müsste dann versuchen, ale diese Dateien zu löschen. Gelingt dies nicht, ist die Nutzdatei als schreibgeschützt zu betrachten. Nach Beenden des Programmes löscht es "seine" Kontrolldatei. Nach einem Absturz bleibt sie erhalten, wird vom System aber geschlossen und kann gelöscht werden(?)

MasterEvil 17. Dez 2005 19:17

Re: Schreib-Zugriff auf Datei
 
ich will da gar nicht so einen draus machen.
Das ist nur erstmal behilfsweise, bis es eine Client/Server Version von meinem ProjectManager gibt, so dass man schonmal annährend im Netzwerk damit arbeiten kann.

Da nehm ich jetzt einfach die einfachste Möglichkeit und änder immer das Schreibgeschützt Attribut um.
Das klappt schon so ganz wunderbar.
Offen halten will ich ja eben nichts, deswegen fällt das weg.

@tomsel:
weiss nicht ob das mit dem Lesen im Zugriff dann noch geht.

Das mit einer zusätzlichen Datei finde ich jedenfalls sehr unschön.


greetz
Steffen


Alle Zeitangaben in WEZ +1. Es ist jetzt 21: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