function DoSaveToFile (Datei : Thfs_Datei) :
String;
var
todatei: TFilestream;
filename :
String;
begin
todatei :=
nil;
filename := HelenFSuri (Datei.Dir + Datei.
Name);
if filename = '
'
then
result := '
404 Directory not found'
else
try
if Datei.SegmentNr = 0
then
If FileExists (filename)
and not Datei.Replace
then
result := '
301 File exists'
else
todatei := TFileStream.Create (filename, fmCreate
or fmOpenWrite)
else
todatei := TFileStream.Create (filename, fmOpenWrite);
if todatei <>
nil then begin
if Datei.SegmentNr > 1
then {Böser Fehler!!!}
todatei.Seek (Datei.SegmentNr * Datei.SegmentSize, soBeginning);
todatei.
Write (Datei.data[0], Length (Datei.data));
todatei.Free;
result := filename + '
- ' + IntToStr (Datei.SegmentNr) + '
/' + IntToStr(Datei.SegmentMax);
end;
except
on e :
Exception do
result := e.
Message;
end;
end;
function DoLoadFromFile (
var Datei : Thfs_Datei) :
String;
var FDatei : TFilestream;
data : TDateiDaten;
filename :
String;
len : Integer;
begin
result := '
';
filename := HelenFSuri (Datei.Dir + Datei.
name);
if filename <> '
'
then begin
FDatei := TFileStream.Create (FileName, fmOpenRead);
if Datei.SegmentNr = 0
then
Datei.SegmentMax := FDatei.Size
Div Datei.SegmentSize + 1;
if FDatei.Size > ((Datei.Segmentnr) * Datei.SegmentSize)
then begin
if Datei.SegmentNr > 0
then
FDatei.Seek ((Datei.Segmentnr) * Datei.SegmentSize, soBeginning);
if (FDatei.Size - FDatei.Position) < Datei.SegmentSize
then
if (FDatei.Size - FDatei.Position) > 0
then
len := FDatei.Size - FDatei.Position
else
len := 0
else
len := Datei.SegmentSize;
SetLength (data, len);
if len > 0
then
FDatei.ReadBuffer (data[0], len);
Datei.data := data;
Datei.SegmentNr := Datei.SegmentNr + 1;
end
else begin
SetLength (data, 0);
Datei.data := data;
end;
result := filename + '
- ' + IntToStr (Datei.SegmentNr) + '
/' + IntToStr(Datei.SegmentMax);
end;
end;