![]() |
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 |
Re: Schreib-Zugriff auf Datei
Hallo Steffen,
setze doch die Datei nach dem Einlesen und bis zum Zurückschreiben einfach auf ReadOnly:
Delphi-Quellcode:
Grüße vom marabu
uses
SysUtils; begin Memo.Lines.LoadFromFile(fileName); if FileIsReadOnly(fileName) then // tell user else FileSetReadOnly(fileName, true); end; |
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 |
Re: Schreib-Zugriff auf Datei
Aber das andere Programm könnte die Datei sofort wieder zurücksetzten mit filesetreadonly(false)...
|
Re: Schreib-Zugriff auf Datei
Öffne die Datei exklusiv.
|
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 ![]() @Luckie: Was genau heisst das? Und wie macht mans? :) greetz Steffen |
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 |
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 |
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.
|
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 |
Re: Schreib-Zugriff auf Datei
Machs einfach so dass du die Datei dierekt nach dem loadfromfile "sinnlos" öffnest:
Delphi-Quellcode:
du kannst die Datei mit closefile(f) wieder freigeben. Wenn das Programm abschmiert, macht das auch keine Probleme, da Windows dann die Datei freigibt.
var
f:file; begin //loadfromfile... assignfile(f,filename); reset(f); |
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(?)
|
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