ALSO:
Ich benutze jetzt zum Lesen:
Delphi-Quellcode:
hFile := CreateFile(PChar(Filename), GENERIC_READ , FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL
or FILE_FLAG_NO_BUFFERING, 0);
und zum Schreiben:
Delphi-Quellcode:
hPart := CreateFile(PChar(Partname), GENERIC_WRITE , FILE_SHARE_WRITE, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL
or FILE_FLAG_SEQUENTIAL_SCAN or FILE_FLAG_WRITE_THROUGH, 0);
Das hat aber auch noch keine signifikanten Geschwindkeitsgewinne gebracht.
Jetzt experimentiere ich mit der Blockgröße. Allerdings, wenn ich ein dynamisches Array of Byte benutze und schreibe:
Delphi-Quellcode:
BytesRead := FileRead(hFile, MemBuffer[0], Min(sizeof(MemBuffer), BytesToRead));
BytesWritten := FileWrite(hPart, MemBuffer[0], BytesRead);
Delphi-Quellcode:
////////////////////////////////////////////////////////////////////////////////
// Procedure : FileRead
// Comment : Reads the given amount of bytes into a buffer
function FileRead(
Handle: Integer;
var Buffer; Count: LongWord): Integer;
begin
if not ReadFile(THandle(
Handle), Buffer, Count, LongWord(Result),
nil)
then
Result := -1;
end;
////////////////////////////////////////////////////////////////////////////////
// Procedure : FileWrite
// Comment : Writes the buffer into the file
function FileWrite(
Handle: Integer;
const Buffer; Count: LongWord): Integer;
begin
if not WriteFile(THandle(
Handle), Buffer, Count, LongWord(Result),
nil)
then
Result := -1;
end;
Ist BytesRead immer -1. Obwohl ich ihm das ertse Arrayelement angegeben habe. Was mache ich da noch falsch?
Nachtrag: Wenn ich FILE_FLAG_NO_BUFFERING nicht setze geht es. Ist allerdings sau langsam, weil er wohl immer nur 4 Byte liest.
Und lesen und schreiben mit
FILE_FLAG_NO_BUFFERING or FILE_FLAG_SEQUENTIAL_SCAN or FILE_FLAG_WRITE_THROUGH
bringt auch anscheinend nicht wirklich was bei einer Blockgröße von 8KB.