1. Alle TStream Nachfahren haben eine Eigenschaft
TStream.Size
2. Warum seekst du auf eine Position 0 vom Ende aus gesehen um dann danach von vorne zu seeken? Warum seekst du nicht gleich auf Count Bytes vom Ende aus? So ist es völlige Resourcenverschwendung
3. Was macht dein Code, wenn die Datei kleiner ist als die mit Count angegebene Datengröße?
Also nochmal das Ganze:
Delphi-Quellcode:
function GetFileStrFromEnd(FileName: String; Count: Integer): String;
var
FS: TFileStream;
I:integer;
begin
FS:=tfilestream.Create(FileName, fmOpenReadWrite or fmShareExclusive);
try
if FS.Seek(Count, soFromEnd) = Count then
begin
Setlength(Result,Count); // nicht vergessen, sonst Zugriffsverletzung
FS.Read(Result[1],Count); // [1] nicht vergessen, sonst Zugriffsverletzung
end
else
result := ''; // stream ist kleiner
finally
fs.Free;
end;
end;
/EDIT: zweite Seite übersehen. Also wurde der 3. Punkt schon erwähnt...