Ups, also für Zeile 706+707 dann Dieses:
Delphi-Quellcode:
If Access = saRead
Then Mode := fmOpenRead
or fmShareDenyWrite
Else If Access = saAppend
Then Mode := fmOpenReadWrite
or fmShareDenyWrite
Else Mode := fmCreate
or fmOpenReadWrite
or fmShareDenyWrite;
Im Testcode lese ich über einen Stream ein und schreibe auch darüber. Und dort wird über CreateFile + einen speziellen THandleStream gearbeitet ... da ist dieser CodeTeil wohl etwas zukurzgeraten, beim Test.
Hier knallt's nicht, aber es ist schon blöd, daß man dem TFileStream nicht weitere Attribute mitgeben kann
(vorallem FILE_FLAG_RANDOM_ACCESS und FILE_FLAG_SEQUENTIAL_SCAN geb ich ja gerne mal an, um Windows ein bissl unter die Arme zu greifen)
Delphi-Quellcode:
Case Mode of
fmReadWrite: Begin
A := GENERIC_READ or GENERIC_WRITE;
C := OPEN_EXISTING;
End;
fmCreate: Begin
A := GENERIC_READ or GENERIC_WRITE;
C := CREATE_NEW;
Mode := fmReadWrite;
End;
fmCreateOrRW: Begin
A := GENERIC_READ or GENERIC_WRITE;
C := OPEN_ALWAYS;
Mode := fmReadWrite;
End;
Else Begin
A := GENERIC_READ;
C := OPEN_EXISTING;
End;
End;
H := CreateFile(PChar(Filename), A, FILE_SHARE_READ, nil, C,
FILE_FLAG_RANDOM_ACCESS or FILE_ATTRIBUTE_NOT_CONTENT_INDEXED, 0);
If H = INVALID_HANDLE_VALUE Then
Raise EFCreateError.CreateResFmt(@SFCreateErrorEx,
[ExpandFileName(Filename), SysErrorMessage(GetLastError)]);
AssignToStream(THandleStream2.Create(H), True, Mode = fmReadOnly, Encoding);
Mal sehn, vielleich verbau ich noch 'ne Abwandlung davon in diesem Code.