
24.04.2014, 16:41
|
Новичок
|
|
Регистрация: 14.10.2012
Сообщения: 58
Версия Delphi: Delphi 10.4
Репутация: 10
|
|
Проверка файла на целостность
Хочу осуществить проверку файла на целостность.
Реши организовать посредством анализа HEX. Ищу 0 и если размер больше 1 кБ, догружаю.
Код:
function MStreamToHex(AStream: TMemoryStream): string;
const
HexArr: array[0..15] of char =
('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F');
var
AByte: Byte;
n: Integer;
begin
SetLength(Result, AStream.Size * 2);
for n := 0 to AStream.Size - 1 do
begin
AByte := PByteArray(AStream.Memory)[n];
Result[n * 2 + 1] := HexArr[AByte shr 4];
Result[n * 2 + 2] := HexArr[AByte and $0F];
end;
end;
function downloadpart(out StartDownLoad, EndDownLoad:string):string;
var
mStream:TMemoryStream;
num,startnum,byte,full:int64;
HexStr,tempStr:string;
i:integer;
begin
with TOpenDialog.Create(nil) do
try
if Execute then
try
mStream:=TMemoryStream.Create;
mStream.LoadFromFile(FileName);
HexStr:=MStreamToHex(mStream);
full:=mStream.Size*2;
finally
mStream.Free;
end;
Finally
free;
end;
memo1.Lines.Add(HexStr);
while num<>full do
begin
num:= Pos('00', HexStr);
if num mod 2 = 1 then
begin
startnum:= num;
delete(tempStr,1,pos('00',HexStr));
num:=num+2;
while num<>full do
begin
if Pos('00', tempStr)=1 then
begin
delete(tempStr,1,pos('00',tempStr));
num:=num+2;
end
else
begin
if (num - startnum)>2048 then
begin
startnum:=startnum+num+Pos('00', tempStr);
delete(tempStr,1,pos('00',tempStr));
num:=num+2;
end
else
begin
StartDownLoad:=startnum div 2;
EndDownLoad:= num div 2;
end;
end;
end;
end;
end;
end;
Где ошибки? Может по другому как-нибудь решить данную задачу можно?
Последний раз редактировалось MotoArhangel, 24.04.2014 в 16:47.
|