OK, hab grad nochmal nachgesehn, FILE_SHARE_READ wird doch gesetzt, also lesend kann man zugreifen.
eventuell ist ja was mit dem fmShareDenyNone nicht in Ordnung
OK, wenn man sich das (in D7) man ansieht, dann wird Rights einfach ignoriert, wenn man die Datei nicht selber ERSTELLT.
Delphi-Quellcode:
constructor TFileStream.Create(const FileName: string; Mode: Word; Rights: Cardinal);
begin
if Mode = fmCreate then
begin
inherited Create(FileCreate(FileName, Rights));
if FHandle < 0 then
raise EFCreateError.CreateResFmt(@SFCreateErrorEx, [ExpandFileName(FileName), SysErrorMessage(GetLastError)]);
end
else
begin
inherited Create(FileOpen(FileName, Mode));
if FHandle < 0 then
raise EFOpenError.CreateResFmt(@SFOpenErrorEx, [ExpandFileName(FileName), SysErrorMessage(GetLastError)]);
end;
end;
[edit]
*weitersuch* gut, in FileOpen wird es aus Mode extrahiert, also eigentlich sollte es da klappen
fmCreate > Sharing in Rights angeben
ansonsten > Sharing mit Mode or-Verknüpfen
Wer ist nur auf diesen SCH*** gekommmen (OK, wenn man fmCreate ansieht, welches $FFFF ist, dann kann man damit nix verknüpfen, aber dennoch ... dann halt immer über Rights)
Delphi-Quellcode:
function FileOpen(const FileName: string; Mode: LongWord): Integer;
{$IFDEF MSWINDOWS}
const
AccessMode: array[0..2] of LongWord = (
GENERIC_READ,
GENERIC_WRITE,
GENERIC_READ or GENERIC_WRITE);
ShareMode: array[0..4] of LongWord = (
0,
0,
FILE_SHARE_READ,
FILE_SHARE_WRITE,
FILE_SHARE_READ or FILE_SHARE_WRITE);
zum Glück nutze ich diesen Stream nie und gehe fast immer direkt über die WinAPU und hatte da noch keine Probleme