Zitat von
shmia:
Dagegen ist das Arbeiten mit TFileStream ist ungepuffert (der Cache des Betriebssystems ist aber dennoch wirksam) und näher am Betriebssystem.
Sorry, aber die Aussage ist falsch. Auch TFileStream arbeitet mit den gepufferten Versionen. Intern ruft TFileStream die Function
FileCreate aus
SysUtils auf, welche
nicht das Flag
FILE_FLAG_WRITE_THROUGH setzt, welches den Dateipuffer umgeht.
Original Delphi-7-SysUtils Code:
Delphi-Quellcode:
function FileCreate(const FileName: string): Integer;
{$IFDEF MSWINDOWS}
begin
Result := Integer(CreateFile(PChar(FileName), GENERIC_READ or GENERIC_WRITE,
0, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0));
end;
{$ENDIF}
{$IFDEF LINUX}
begin
Result := FileCreate(FileName, FileAccessRights);
end;
{$ENDIF}
müsste aussehen wie folgend, um den Cache zu umgehen:
Code:
function FileCreate(const FileName: string): Integer;
{$IFDEF MSWINDOWS}
begin
Result := Integer(CreateFile(PChar(FileName), GENERIC_READ or GENERIC_WRITE,
0, nil, CREATE_ALWAYS, [color=#f50000]FILE_FLAG_WRITE_THROUGH or [/color]FILE_ATTRIBUTE_NORMAL,
0));
end;
{$ENDIF}
{$IFDEF LINUX}
begin
Result := FileCreate(FileName, FileAccessRights);
end;
{$ENDIF}
...
...