Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   fmShareDenyWrite rückgängig machen? (https://www.delphipraxis.net/175943-fmsharedenywrite-rueckgaengig-machen.html)

Baum21 31. Jul 2013 14:16

fmShareDenyWrite rückgängig machen?
 
Hallo,
Ich habe ein kleines Problem,
Ich habe versucht beim Start von meinem Programm zu verhindern das jemand etwas in eine andere Datei schreibt, aus der ich ein paar Werte auslesen muss, und die nicht geändert werden darf:
Code:
TFileStream.Create('Dateipfad',fmShareDenyWrite);
Das hat auch alles ganz toll geglappt, nur muss ich am Ende des Programmes selbst die Datei überschreiben. Wie kann ich den "Schreibschutz" von der Datei wieder wegnehmen?
Habs schon mit
Code:
TFileStream.Create('Dateipfad',fmOpenWrite);
probiert, krieg dann aber nur folgende Fehlermeldung:
"Datei C:\... kann nicht geöffnet werden. Der Prozess kann nicht auf die Datei zugreifen, da diese bereits von einem anderen Prozess verwendet wird."
Hab auch schon versucht anstelle von fmShareDenyWrite fmShareExclusive zu benutzen, klappt genauso wenig..
Also was kann ich tun um selbst noch die datei beschreiben zu können?

Sir Rufo 31. Jul 2013 14:23

AW: fmShareDenyWrite rückgängig machen?
 
Diese Sperre ist nur so lange gültig, wie du die Hand auf der Datei hast.

Also nimm dein Pfötchen von der Datei (schicke den FileStream ins Nirwana)

Baum21 31. Jul 2013 14:36

AW: fmShareDenyWrite rückgängig machen?
 
Und wie mache ich das?
(Bin noch nen Anfänger in Delphi :) )

jaenicke 31. Jul 2013 14:39

AW: fmShareDenyWrite rückgängig machen?
 
Es genügt den FileStream freizugeben.
Delphi-Quellcode:
var
  MyFile: TFileStream;
begin
  MyFile := TFileStream.Create('Dateipfad', fmShareDenyWrite);
  try
    MyFile. ...
  finally
    MyFile.Free; // danach ist die Datei wieder nutzbar
  end;
end;
fmShareDenyWrite reicht aber eigentlich kaum, normalerweise wird das (mit or) kombiniert mit fmOpenRead oder fmCreate um die Datei zum Lesen zu öffnen oder neu zu erstellen.

Baum21 31. Jul 2013 19:01

AW: fmShareDenyWrite rückgängig machen?
 
Ok, so klappts,
vielen dank :)
Bei mir tut sich grad aber noch eine Frage auf:
Ich will das sich das Programm gleich beim öffnen versteckt.
Also hab ich unter FormCreate Form1.Hide; hingeklatscht.
Geschehen tut aber nichts. wenn ich das selbe unter einem Button mach funktionierts.
Warum wird das Form1.Hide bei FormCreate einfach ignoriert und was kann ich dagegen tun? :)

Christian Seehase 31. Jul 2013 20:23

AW: fmShareDenyWrite rückgängig machen?
 
Moin Baum,

mache bitte für die neue Frage einen neuen Thread auf, damit nichts durcheinander geht und andere später bei einer Suche auch das finden, was sie suchen.

Vielen Dank im Voraus.

Baum21 31. Jul 2013 20:37

AW: fmShareDenyWrite rückgängig machen?
 
Die Frage hat sich grade eh erledigt, ich machs jetzt mit Application.ShowMainForm := false.
aber das mit dem neuem thread mach ich das nächste Mal :)

jaenicke 1. Aug 2013 04:24

AW: fmShareDenyWrite rückgängig machen?
 
Auch wenn das der falsche Thread ist, erkläre ich noch kurz warum das so ist:
OnCreate des Formulars wird ausgelöst, wenn das Objekt, das das Formular repräsentiert, erstellt wird. Danach wird das dann erst angezeigt, wobei auch OnShow ausgelöst wird. Während es gerade angezeigt wird (OnShow) lässt sich die Sichtbarkeit aber auch noch nicht verändern, da ginge also kein Hide. Erst danach ist das Fenster tatsächlich sichtbar und ließe sich mit Hide wieder verstecken.

Deshalb ist deine Lösung mit ShowMainForm genau richtig. :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:34 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz