При вызове Move появляются глюки. Что я делаю не так?
Примечание: размер тестируемого файла должен быть > 4096 byte
Код
uses Strings;
{tested in FPC}
Const BlockSize = 4096;
type Buffer = array [0 .. BlockSize - 1 ] of char;
var X: Buffer;
A: PChar;
F: file;
data: AnsiString;
P: PAnsiString; //Pointer;
fpos,cont_len,Count: longint;
sz,cnt: word;
begin
Assign (F, 'stest.pas');
{$I-}
Reset (F, 1);
{$I+}
if IOresult <> 0 then
exit;
cont_len := FileSize (F);
SetLength (data, cont_len);
GetMem(A,cont_len);
if A=Nil then exit;
A[0]:=#0;
data:='';
fpos:=0;
P:=pointer(A);
While Not Eof(F) do
begin
BlockRead (F, X, BlockSize,Cnt);
writeln (Longint(P): 4, Longint(P)-Longint(A) : 8);
move (X, P, Cnt); { копируем в строку блок Х с позиции fpos. BUG здесь }
inc (fpos, Cnt);
P := Pointer (@(A[fpos]));
A[fpos] := #0;
end;
Close (F);
// data := AnsiString (A);
FreeMem (A, cont_len);
writeln (fpos);
readln;
end.
{tested in FPC}
Const BlockSize = 4096;
type Buffer = array [0 .. BlockSize - 1 ] of char;
var X: Buffer;
A: PChar;
F: file;
data: AnsiString;
P: PAnsiString; //Pointer;
fpos,cont_len,Count: longint;
sz,cnt: word;
begin
Assign (F, 'stest.pas');
{$I-}
Reset (F, 1);
{$I+}
if IOresult <> 0 then
exit;
cont_len := FileSize (F);
SetLength (data, cont_len);
GetMem(A,cont_len);
if A=Nil then exit;
A[0]:=#0;
data:='';
fpos:=0;
P:=pointer(A);
While Not Eof(F) do
begin
BlockRead (F, X, BlockSize,Cnt);
writeln (Longint(P): 4, Longint(P)-Longint(A) : 8);
move (X, P, Cnt); { копируем в строку блок Х с позиции fpos. BUG здесь }
inc (fpos, Cnt);
P := Pointer (@(A[fpos]));
A[fpos] := #0;
end;
Close (F);
// data := AnsiString (A);
FreeMem (A, cont_len);
writeln (fpos);
readln;
end.
Сообщение отредактировано: romtek -