AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Datei für Schreibzuriffe sperren?
Thema durchsuchen
Ansicht
Themen-Optionen

Datei für Schreibzuriffe sperren?

Ein Thema von thomasdrewermann · begonnen am 16. Sep 2002 · letzter Beitrag vom 19. Sep 2002
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von thomasdrewermann
thomasdrewermann

Registriert seit: 8. Jun 2002
Ort: Herne
575 Beiträge
 
Delphi 3 Professional
 
#1

Datei für Schreibzuriffe sperren?

  Alt 16. Sep 2002, 08:41
Hi,
ist euch bestimmt auch schon passiert, das der sagt, die Datei wird gerade benutzt, löschen/umbennen/speichern nicht möglich!

Wie öffne ich eine Datei so, dass man sie nicht löschen und speichern kann?


MFG
Thomas
Sport ist mord...
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#2
  Alt 16. Sep 2002, 09:08
Hallo,

wenn Du die Datei mit AssignFile/Reset/Close bearbeitest, dann solltest Du Dir mal in der Delphi-Hilfe die verschiedenen Werte der Variablen "FileMode" ansehen. Damit kannst Du steuern, in welchem Modus (nur lesen / nur schreiben / exklusiv etc.) Du eine Datei öffnen möchtest.

Wenn Du mit der API-Funktion "CreateFile" arbeitest, dann findest Du die entsprechenden Paramater in der MSDN-Library :: CreateFile().
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Benutzerbild von thomasdrewermann
thomasdrewermann

Registriert seit: 8. Jun 2002
Ort: Herne
575 Beiträge
 
Delphi 3 Professional
 
#3
  Alt 16. Sep 2002, 22:40
Wie gebe ich eine mit
Code:
tfilestream.create('DATEI',fmshareexclusive);
wieder frei?
ich meine nicht in der selben procedure, sondern an einer anderen stelle im PROGRAMM, gibts da ne möglichkeit. Die variabele ist lokal für die eine Procedure deklariert.

MFG
Thomas
Sport ist mord...
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#4
  Alt 16. Sep 2002, 22:51
Moin Thomas,

die Variable ist ja eingentlich nur ein Pointer auf das Filestream Objekt.
Wenn Du jetzt ein public Feld in einem Formular anlegst, oder eine globale Variable vom Typ TFileStream, dann kannst Du in dieser lokalen Prozedur diesen Pointer in die globale Variable übergeben, und an jeder beliebigen Stelle im Programm darauf zugreifen, und dass natürlich mit jeder beliebigen Methode.
Nur: Dieses Verfahren wäre, gelinde gesagt, nicht besonders sauber.

Mir fallen dazu zwei Fragen ein:
  1. Warum muss die FileStream Variable lokal deklariert sein?
  2. In welchem Zusammenhang brauchst Du den FileStream? Vielleicht gibt's ja eine andere Lösung.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von thomasdrewermann
thomasdrewermann

Registriert seit: 8. Jun 2002
Ort: Herne
575 Beiträge
 
Delphi 3 Professional
 
#5
  Alt 16. Sep 2002, 22:59
Mir gings nur darum den Dateizuriff für andere anwendungen zu sperren, aber ich will zu laufzeit dateien sperren und entsperren können.
Sport ist mord...
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#6
  Alt 16. Sep 2002, 23:12
Moin Thomas,

dann bietet es sich doch an, ein Objekt zu erstellen, das ein variables Array enthält, welches Einträge für Dateipfad und entsprechenden TFileStream speichert, und das mit Methoden versehen ist, die es einem ermöglichen übergebene Dateien über fmShareExclusive zu sperren, bzw. durch Freigeben eines Eintrags im array (anschliessendes komprimieren des Arrays eventuell einplanen) wieder zur Verfügung zu stellen.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von thomasdrewermann
thomasdrewermann

Registriert seit: 8. Jun 2002
Ort: Herne
575 Beiträge
 
Delphi 3 Professional
 
#7
  Alt 16. Sep 2002, 23:14
Kannst du die Deklaration eines solchen variabelen Arrays in Code-Form posten??Ich davon nämlich 0 Ahnung.

MFG
Thomas
Sport ist mord...
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#8
  Alt 16. Sep 2002, 23:27
Moin Thomas,

ich hab' da mal eben was zusammengeschrieben, wie ich mir das so ungefähr vorstelle. Ist natürlich nicht getestet, aber probiers mal aus, bzw. schau's Dir mal an.

Code:
[b]type[/b]
  TcsFileLockEntry =
    [b]packed[/b] [b]record[/b]
      sFilePath : [b]string[/b];
      fsFile   : TFileStream;
    [b]end[/b];

  TcsFileLocker = [b]class[/b](TObject)
  [b]private[/b]
    FaFilelist : [b]array[/b] [b]of[/b] TcsFileLockEntry;
  [b]public[/b]
    [b]constructor[/b] Create;
    [b]destructor[/b] Destroy; override;
    [b]procedure[/b] LockFile([b]const[/b] p_sFilePath : [b]string[/b]);
    [b]procedure[/b] UnlockFile([b]const[/b] p_sFilePath : [b]string[/b]);
  [b]end[/b];

[b]implementation[/b]

[color=#000080]{$R *.DFM}[/color]



[color=#000080]{ TcsFileLocker }[/color]

[b]constructor[/b] TcsFileLocker.Create;
[b]begin[/b]
  [b]inherited[/b] Create;
  [color=#000080]// Nur der Ordung halber, eigentlich nicht notwendig[/color]
  SetLength(FaFileList,0);
[b]end[/b];

[b]destructor[/b] TcsFileLocker.Destroy;

[b]var[/b]
  i : integer;

[b]begin[/b]
  [b]for[/b] i := 0 [b]to[/b] High(FaFileList) [b]do[/b]
  [b]begin[/b]
    FreeAndNil(FaFileList[i].fsFile);
  [b]end[/b];
  SetLength(FaFileList,0);
  [b]inherited[/b] Destroy;
[b]end[/b];

[b]procedure[/b] TcsFileLocker.LockFile([b]const[/b] p_sFilePath: [b]string[/b]);
[b]begin[/b]
  [color=#000080]// Neuen Eintrag erzeugen[/color]
  SetLength(FaFileList,Length(FaFileList)+1);
  FaFileList[High(FaFileList)].sFilePath := p_sFilePath;
  FaFileList[High(FaFileList)].fsFile   := TFileStream.Create(p_sFilePath,fmShareExclusive);
[b]end[/b];

[b]procedure[/b] TcsFileLocker.UnlockFile([b]const[/b] p_sFilePath: [b]string[/b]);

[b]var[/b]
  i       : integer;
  iDeleted : integer;

[b]begin[/b]
  iDeleted := -1;
  [b]for[/b] i := 0 [b]to[/b] High(FaFileList) [b]do[/b]
  [b]begin[/b]
    [b]if[/b] FaFileList[i].sFilePath = p_sFilePath [b]then[/b]
    [b]begin[/b]
      FreeAndNil(FaFileList[i].fsFile);
      iDeleted := i;
      break;
    [b]end[/b];
  [b]end[/b];
  [b]if[/b] iDeleted > -1 [b]then[/b]
  [b]begin[/b]
    [b]for[/b] i := iDeleted+1 [b]to[/b] High(FaFileList) [b]do[/b]
    [b]begin[/b]
      FaFileList[i-1] := FaFileList[i];
    [b]end[/b];
    SetLength(FaFileList,Length(FaFileList)-1);
  [b]end[/b];
[b]end[/b];
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von thomasdrewermann
thomasdrewermann

Registriert seit: 8. Jun 2002
Ort: Herne
575 Beiträge
 
Delphi 3 Professional
 
#9
  Alt 16. Sep 2002, 23:38
ich hab die sache in eine unit gesetzt und hab ein progr geschrieben, das wie folgt aussieht:
Code:
procedure TForm1.Button1Click(Sender: TObject);
var i:tcsfilelocker;
begin
i:=tcsfilelocker.Create;
i.LockFile(edit1.text);
i.free;
end;

procedure TForm1.Button2Click(Sender: TObject);
var i:tcsfilelocker;
begin
i:=tcsfilelocker.Create;
i.unLockFile(edit1.text);
i.free;
end;
Hab ich was falsch gemacht`??

Man kann die Datei trtzdem noch öffnen und ausführen!

MFG
Thomas
Sport ist mord...
  Mit Zitat antworten Zitat
Benutzerbild von thomasdrewermann
thomasdrewermann

Registriert seit: 8. Jun 2002
Ort: Herne
575 Beiträge
 
Delphi 3 Professional
 
#10
  Alt 16. Sep 2002, 23:48
ich habs raus )
Ups wie peinlich, da bekommt man einen mundgerechten Code, und man ist zu doof ihn einzubinden .

VIELEN DANK an Christian DANKE
Sport ist mord...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:40 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