Wie groß ist eigentlich die Datei?
TMemoryStream ließt ja erstmal die ganze Datei ein, selbst wenn nur das Stückchen am Anfang gebraucht wird.
Zur Zeitmessung:
wie schon gesagt, wie hast du den Unterschied festgestellt?
hast du bedacht, daß die Datei beim einlesen in der Windows-FileCache landet und demnach eim nächsten Mal eventuell wesendlich schneller geladen werden könnte? (solange du die FileCache vorher nicht jedesmal in einen definierten/gleichwertigen Zustand versetzt)
[add]
ist dir aufgefallen, daß das HiByte von wHeader2 undefiniert ist?
Dieses ist ja ein Word und Write ließt nur 1 Byte (in das LoByte).
u solltest also vor der Schleife wHeader2 in einen definierten Zustand bringen (z.B.
wHeader2 := 0; ).
Delphi-Quellcode:
Var F: File of Byte;
Buf: Array[0..48*3-1] of Byte;
W: Integer;
Begin
AssignFile(F, ASpecialFile);
Try
FileMode = fmOpenRead;
Reset(F);
Seek(F, 16);
BlockRead(F, Buf, SizeOf(Buff), W);
If W = SizeOf(Buf) Then Begin
SetLength(Result, 48);
For i := 0 to 47 do
//Result[i + 1] := WideChar(PWord(@Buf[i * 3])^
// + Buf[i * 3 + 2] * 256);
Result[i + 1] := WideChar(Buf[i * 3] + Buf[i * 3 + 1] * 256
+ Buf[i * 3 + 2] * 256);
End Result := '';
Finally
CloseFile(F);
End;
End;
(ich hoff ich hab's richtig übersezt)