Zitat von
Fridolin Walther:
Dein Filestream muss die Datei ebenfalls mit FILE_SHARE_DELETE öffnen
Das ist ein guter Tipp. Ich hatte mich auf die Doku von Delphi beschränkt, aber auch da hätte man das rauslesen können.
Nunja...damit bin ich in Stück weiter gekommen aber leider auch noch nicht am Ziel.
Ich habe einfach als Basis einen THandleStream verwendet und dann ein eigenes Create (ab)geschrieben.
Dabei habe ich bisher nur das öffnen einer bestehenden Datei geändert um zunächst testen zu können.
Jetzt bekomme ich keine Fehlermeldung mehr aber der Inhalt ist einfach Schrott.
(die Dateigröße bleibt gleich, der Inhalt sieht aber wie Speichermüll aus)
Sieht jemand meinen Fehler? ich habe Tomaten auf den Augen.
Delphi-Quellcode:
constructor TMyFileStream.Create(const FileName: string; Mode: Word);
var
hFile : integer;
begin
if Mode = fmCreate then
begin
hFile := FileCreate(FileName);
if hFile < 0 then
raise EFCreateError.CreateResFmt(@SFCreateError, [FileName]);
end else
begin
hFile := integer(CreateFile(PChar(FileName), GENERIC_READ or GENERIC_WRITE,
FILE_SHARE_DELETE or FILE_SHARE_WRITE or FILE_SHARE_READ, nil, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, 0));
if hFile < 0 then
raise EFOpenError.CreateResFmt(@SFOpenError, [FileName]);
end;
inherited Create(hFile);
end;