Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Datei in Benutzung (https://www.delphipraxis.net/119875-datei-benutzung.html)

SaFu 2. Sep 2008 15:09


Datei in Benutzung
 
Hi

Ich weis das Thema wurde oft genug behandelt nd hab hier im Forum auc schon geguckt. Hab aber immer nur sachen gefunden, wie man abfragt ob eine Datei in Benutzung ist.

Ich wollte meiner LadeProcedure irgenwie klarmachen, das sie die Datei als "In Benutzung" kennzeinen soll.

Was gibt es da so

hab das hier um meine Datei ins Grid zu Laden beim Speichern soll das Flag wieder zurückgesetzt werden

Delphi-Quellcode:
procedure TForm7.GridLaden;
var x, y, row, col,len :Word;
    Grid :TFileName;
    FileStream :TMemoryStream;
    buff :string;
begin
  FileStream:= TMemoryStream.Create; //MemoryStream erzeugen

  Grid:= FileListbox1.FileName;
  FileStream.LoadFromFile(Grid);

  FileStream.Read(row, SizeOf(Word));
  FileStream.Read(col, SizeOf(Word));

  for x:= 0 to row do
   for y:= 0 to col do
    begin
     FileStream.Read(len, SizeOf(Word));
     SetLength(buff, len);
     FileStream.Read(buff[1], len);
     StringGrid1.Cells[y,x]:= buff;
    end;
   FileStream.Free;
end;
Gruß sascha

Die Muhkuh 2. Sep 2008 15:12

Re: Datei in Benutzung
 
Hi,

Du willst, wenn jemand anders diese Datei auch öffnen will, dass er die Meldung bekommt "Datei ist in Benutzung"?

SaFu 2. Sep 2008 15:13

Re: Datei in Benutzung
 
Genau kurzgesagt

Die Muhkuh 2. Sep 2008 15:13

Re: Datei in Benutzung
 
Nimm einen TFilestream anstatt den TMemoryStream und als Modus nimmst Du fmShareExclusive

SaFu 2. Sep 2008 15:46

Re: Datei in Benutzung
 
So hab es mal umgebaut aber ich kann es Trotzdem noch mit einer neuen Instanz meines Programmes ein Zweites mal Öffnen

Delphi-Quellcode:
procedure TForm7.GridLaden;
var x, y, row, col,len :Word;
    Grid :TFileName;
    FFileStream1: TFileStream;
    buff :string;
begin
  FFileStream1 := TFileStream.Create(FileListbox1.FileName, fmOpenRead, fmShareExclusive);

  FFileStream1.Read(row, SizeOf(Word));
  FFileStream1.Read(col, SizeOf(Word));

  for x:= 0 to row do
   for y:= 0 to col do
    begin
     FFileStream1.Read(len, SizeOf(Word));
     SetLength(buff, len);
     FFileStream1.Read(buff[1], len);
     StringGrid1.Cells[y,x]:= buff;
    end;
   FFileStream1.Free;
end;

Die Muhkuh 2. Sep 2008 15:47

Re: Datei in Benutzung
 
Delphi-Quellcode:
FFileStream1 := TFileStream.Create(FileListbox1.FileName, fmOpenRead, fmShareExclusive);
Was ist das o.O

Delphi-Quellcode:
FFileStream1 := TFileStream.Create(FileListbox1.FileName, fmOpenRead or fmShareExclusive);

SaFu 2. Sep 2008 15:50

Re: Datei in Benutzung
 
Nee geht immernoch selbst wenn ich es so schreibe


Delphi-Quellcode:
FFileStream1 := TFileStream.Create(FileListbox1.FileName,fmShareExclusive);

DeddyH 2. Sep 2008 15:57

Re: Datei in Benutzung
 
Zitat:

Zitat von Delphi-Hilfe
Die Methode erzeugt eine Instanz von TFileStream.

Delphi-Quellcode:
constructor Create(const FileName: string; Mode: Word);
Beschreibung

Mit Create wird ein Datei-Stream zum Lesen aus oder Schreiben in die benannte Datei instantiiert. In den Parametern wird der Name und der Öffnungsmodus der Datei übergeben.

Der Parameter Mode steuert, auf welche Art die Datei geöffnet wird. Der Parameter besteht aus zwei Elementen: Eines beschreibt das Öffnen, und eines legt den Modus für gemeinsamen Zugriff fest. Beide Elemente werden durch ein logisches ODER verknüpft. Der Öffnen-Modus kann folgende Konstantenwerte annehmen:

Wert Bedeutung

fmCreate Es wird eine Datei mit dem angegebenen Namen angelegt. Ist eine Datei mit diesem Namen bereits vorhanden, wird die Datei zum Schreiben geöffnet.
fmOpenRead Die Datei wird ausschließlich zum Lesen geöffnet.
fmOpenWrite Die Datei wird ausschließlich zum Schreiben geöffnet. Beim Schreiben in die Datei wird der aktuelle Inhalt vollständig ersetzt.
fmOpenReadWrite Die Datei wird so geöffnet, daß der aktuelle Inhalt geändert werden kann, ohne daß er ersetzt wird.

Für den Zugriffsmodus sind folgende Konstantenwerte verfügbar:

Wert Bedeutung

fmShareCompat Der Zugriffsmodus ist kompatibel zu dem Verfahren, mit dem Dateisteuerblöcke (FCBs) geöffnet werden.
fmShareExclusive Andere Anwendungen können die Datei nicht öffnen.
fmShareDenyWrite Andere Anwendungen können die Datei ausschließlich zum Lesen öffnen.
fmShareDenyRead Andere Anwendungen können die Datei ausschließlich zum Schreiben öffnen.
fmShareDenyNone Andere Anwendungen können die Datei ohne Einschränkungen zum Lesen oder Schreiben öffnen.

Wenn die Datei nicht geöffnet werden kann, löst Create eine Exception aus.


taaktaak 2. Sep 2008 15:58

Re: Datei in Benutzung
 
Könnte es sein, dass "fmShareExclusive" nur solange eine Wirkung hat, bis die Instanz von FileStream wieder freigegeben wird? :zwinker:

DeddyH 2. Sep 2008 16:00

Re: Datei in Benutzung
 
Davon ist auszugehen, wäre ja blöde, wenn nicht :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:10 Uhr.
Seite 1 von 4  1 23     Letzte »    

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