Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   TFilestream.LoadFromFile welcher Defaultlockmechanismus wird genutzt (https://www.delphipraxis.net/195743-tfilestream-loadfromfile-welcher-defaultlockmechanismus-wird-genutzt.html)

v2afrank 21. Mär 2018 14:09

Delphi-Version: 5

TFilestream.LoadFromFile welcher Defaultlockmechanismus wird genutzt
 
Ich habe hier ein Stück älteren Code in dem unter anderem folgender Code steht
Delphi-Quellcode:
FileStream := TFileStream.Create(Filename, fmOpenRead);
Jetzt sollte das Programm parallel benutzt werden und es kam auf eine Fehlermeldung dass auf eine Datei nicht zugegriffen werden kann. Diese wird mit dem obigen Dateischnipsel geladen.
In der Hilfe steht " and (possibly) a share mode or'ed together"
Was ist wenn ich den Modus nicht angebe. Welcher Zugriff ist dann erlaubt ?

himitsu 21. Mär 2018 14:23

AW: TFilestream.LoadFromFile welcher Defaultlockmechanismus wird genutzt
 
Nur ich und sonst keiner, wenn ich mich nicht irre. (ShareDeniedAll oder so)

v2afrank 21. Mär 2018 14:26

AW: TFilestream.LoadFromFile welcher Defaultlockmechanismus wird genutzt
 
Wenn dem so ist könnte ich mein Problem ja beheben. Ich brauche in allen Instanzen nur lesenden Zugriff.
Wobei glaube ich nicht in dem Hilfelink sthet ja dass es eine Veroderung ist.
Demzufolge müßte es fmShareCompat: Integer = 0; sein fmShareExclusive hat den Wert 10. Oder ?
Dazu noch was bedeutet fmShareCompat ? Die Hilfe sagt Open File in Dos Mode. Das bedeutet ?

Redeemer 21. Mär 2018 14:34

AW: TFilestream.LoadFromFile welcher Defaultlockmechanismus wird genutzt
 
https://docs.microsoft.com/de-de/win...-fcb-structure

Verstehe auch nicht, wo das Problem ist, einen Parameter unbedingt weglassen zu wollen...

Uwe Raabe 21. Mär 2018 16:20

AW: TFilestream.LoadFromFile welcher Defaultlockmechanismus wird genutzt
 
Zitat:

Zitat von v2afrank (Beitrag 1396887)
Demzufolge müßte es fmShareCompat: Integer = 0; sein fmShareExclusive hat den Wert 10.

Eben weil
Delphi-Quellcode:
fmShareCompat = 0
ist, hat es beim OR ja keine Auswirkung. In deinem Fall wäre fmShareDenyWrite oder fmShareDenyNone wohl die bessere Wahl.

Delphi-Quellcode:
FileStream := TFileStream.Create(Filename, fmOpenRead or fmShareDenyNone);

KodeZwerg 21. Mär 2018 20:23

AW: TFilestream.LoadFromFile welcher Defaultlockmechanismus wird genutzt
 
Mit dem TStream kenn ich mich nicht so super aus aber falls Dir auch ein Handle zu einer Datei ausreicht könntest Du Sie so öffnen ohne das andere Prozesse (oder Dein eigener) meckern:
Delphi-Quellcode:
hFile := CreateFile(pChar(FullPathFilename), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, 0, 0);
if (hFile = INVALID_HANDLE_VALUE) then
 begin
  // Fehler: Dateizugriff nicht möglich
  Exit;
 end;
  // mach was mit dem Handle, Beispiel: Daten in einen Puffer laden. ReadFile() würde sich dafür eignen.
CloseHandle(hFile);
PChar für alte Delphi's.

Uwe Raabe 21. Mär 2018 20:57

AW: TFilestream.LoadFromFile welcher Defaultlockmechanismus wird genutzt
 
Zitat:

Zitat von KodeZwerg (Beitrag 1396917)
Delphi-Quellcode:
hFile := CreateFile(pChar(FullPathFilename), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, 0, 0);

Das ist interessanterweise genau das, was
Delphi-Quellcode:
TFileStream.Create(Filename, fmOpenRead or fmShareDenyRead)
intern tut.

Übrigens:
Delphi-Quellcode:
PChar
funktioniert auch für neue Delphiversionen.

KodeZwerg 21. Mär 2018 21:15

AW: TFilestream.LoadFromFile welcher Defaultlockmechanismus wird genutzt
 
Wobei ich mir die SDK/Win32 Hilfe nahm um den Befehl so zu nutzen (WinApi Programm),
das TFileStream das auch so einsetzt wusst ich bis jetzt auch noch nicht, hab ich noch nie reingeschaut aber ja, interessant!
Ich nutze es für Hashes/Diggest oder simples bytecompare bzw generell binär-daten lesen.
Wenn man sich einmal dran gewöhnt hat, vermisst man kaum die TStream-Deluxe funktionen ;-D

ps: Sorry falls das mit PChar falsch/richtig angeben wurde!

v2afrank 22. Mär 2018 05:44

AW: TFilestream.LoadFromFile welcher Defaultlockmechanismus wird genutzt
 
Auf jeden Fall Danke für Eure Hilfe. Ich werde es heute direkt einmal testen


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:57 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