![]() |
Datei exklusiv öffnen
Hi hab folgenden Code
Delphi-Quellcode:
so ich bekomme nun die meldung, dass ich die Datei nicht öffnen kann weil sie geschützt ist..das wollte ich auch erreichen..aber erst wollte ich sie gern offen haben und erst dann schützen..wie stelle ich das denn an..oder geht das nicht mehr ?
const FILE_NAME = 'C:\Test.txt';
procedure TForm1.Button1Click(Sender: TObject); begin TFileStream.Create(File_Name, fmshareexclusive); Shellexecute(0,'OPEN',Pchar(File_Name),nil,0,0); end; Danke schonmal für die Hilfe |
Re: Datei exklusiv öffnen
Du hast mit Deinem Code zwei unabhängige Zugriffe gebaut: zuerst den exclusiven Zugriff per Filestream (damit gehört die Datei exclusiv Deinem TFilestream) und dann einen Zugriff auf Betriebssystemebene (der wird dann natürlich geblockt).
Gib' zuerst Deinem Filestream einen Namen:
Delphi-Quellcode:
Erst wenn Du den FileStream freigibts, kann wieder anderweitig auf die Datei zugegriffen werden.
Fs := TFilestream.create(...)
FS.Read(var Buffer; Count: Longint): Longint;//das schaust Du in der Hilfe nach Grüße, Messie |
Re: Datei exklusiv öffnen
Hi,
und außerdem musst du etwas mehr auf die Syntax achten:
Delphi-Quellcode:
Grüße vom marabu
var
fs: TFileStream; begin fs := TFileStream.Create(FileName, fmOpenRead, fmShareExclusive); // ... fs.Free; end; |
Re: Datei exklusiv öffnen
okay das habe ich gemeint, wenn ich den Stream wieder freigebe dann kann man wieder beliebig auf die Datei zugreifen..das ist aber gar nicht gut :(.
|
Re: Datei exklusiv öffnen
Das musst du wohl etwas genauer erklären. Du willst den share mode für eine geöffnete Datei nachträglich ändern und die Zugriffsperre soll erhalten bleiben, auch wenn dein Programm seinen Zugriff beendet? Das erste erreichst du über ReopenFile(), das zweite ist etwas schwieriger. Aber vielleicht habe ich dich ja auch völlig falsch verstanden.
marabu |
Re: Datei exklusiv öffnen
ich möchte, dass solange mein Programm läuft und eine Datei benutzt diese eben gesperrt ist, wenn mein Programm beendet wird soll der Zugriff aufgehoben werden.
Somit wäre es, wie du sagst die Variante mit ReOpenFile() |
Re: Datei exklusiv öffnen
Nein, dann ist mein erster Code der richtige. Allerdings musst du den Zeitpunkt für das Create und das Free des FileStream geschickt legen - vielleicht Create in den event handler für OnCreate deiner MainForm und das Free in den event handler für OnDestroy.
marabu |
Re: Datei exklusiv öffnen
ja nur wenn ich eben die Datei als Stream habe dann kann ich sie nicht öffnen und wenn ich free mache dann kann ich sie öffnen nur ist sie nicht mehr geschützt.
OnCreate mache ich sie geschützt..aber kann mit ihr dann gar nichts anfangen würde sie gern mit shellexcute ausführen..aber geht ja nicht..und bei free geht es klar aber dann ist sie nicht mehr geschützt die Datei :( will somit eine Datei erst Öffnen und dann nachträglich den Zugriff sperren, sprich so lange mein Programm die Datei benutzt soll der Zugriff nicht mehr funktionieren. |
Re: Datei exklusiv öffnen
Deine Anforderung wird vielleicht besser über Berechtigungen (Benutzerrechte) abgedeckt. Vielleicht gibt es noch eine andere Lösung. Um was für einen Dateityp handelt es sich denn? Und warum das Ganze?
marabu |
Re: Datei exklusiv öffnen
Habe ich das richtig verstanden:
Du möchtest die Datei von Beginn bis Ende Deiner Programmlaufzeit für andere Prozesse sperren, sie aber während Deiner Programmausführung per Shellexecute starten können? Dann kannst Du direkt vor Shellexecute freeandnil(FS) benutzen, und danach wieder FS.create(...). Damit bleibt für andere Prozesse nur ein Zeitfenster von einigen hundert Prozessorschritten um sich die Datei zu greifen. Such mal in der Hilfe nach oder suche nach Beispielen, wie Shellexecute auf die Ausführung der Datei wartet damit Du keine Zugriffsverletzung beim erneuten create bekommst. Evtl. noch ein application.processmessages dazwischenschalten, wenn Du nicht in einem Thread arbeitest. Grüße, Messie |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:59 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-2025 by Thomas Breitkreuz