![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Хочу осуществить проверку файла на целостность.
Реши организовать посредством анализа 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. |
|
#2
|
||||
|
||||
|
Используй SHA1/MD5/CRC32 и т.д.
|
|
#3
|
|||
|
|||
|
+ необходимо вычислить промежуток, который нужно докачать.
Как эти алгоритмы мне помогут решить данную задачу? Последний раз редактировалось MotoArhangel, 24.04.2014 в 17:00. |
|
#4
|
||||
|
||||
|
При передаче части передавать хеш этой части, по завершению всех передач — передать общий хеш.
|
|
#5
|
|||
|
|||
|
Так. А при перезагрузке компа и последующей попытке докачать файл, как мне хеш части файла поможет, в определении положения места с которого необходимо качать?
|
|
#6
|
||||
|
||||
|
Посмотри, как устроены торрент-файлы и сделай у себя так же.
|