You are not logged in.
Pages: 1
@ab
Would it be possible to expand the StringFromFile function to allow getting parts of a file? This would be very handy when serving big files via http with RangeRequests. Maybe something similar with defaults which would allow the current usage to continue working unaffected:
function StringFromFile(const FileName: TFileName; const StartPos: Int64 = 0; const Count: Int64 = 0): RawByteString;
var F: THandle;
Size, BytesToCopy, BytesCopied: integer;
begin
result := '';
if (FileName='') or (StartPos < 0) or (Count < 0) then
exit;
F := FileOpenSequentialRead(FileName);
if PtrInt(F)>=0 then
begin
Size := GetFileSize(F,nil);
if Size>0 then
begin
BytesToCopy := Size - StartPos;
if (Count > 0) and (BytesToCopy >= Count) then //count = 0 should always return the entire file/rest of the file
BytesToCopy := Count;
SetLength(result, BytesToCopy);
if StartPos > 0 then
FileSeek(F, StartPos, 0);
BytesCopied := FileRead(F,pointer(result)^,BytesToCopy);
if BytesCopied < 0 then //FileRead failed
result := ''
else
if BytesCopied < BytesToCopy then //less bytes were left to read than anticipated
SetLength(result, BytesCopied);
end;
FileClose(F);
end;
end;
Last edited by squirrel (2017-11-14 05:36:51)
Offline
Pages: 1