|
|
Регистрация | << Правила форума >> | 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 и т.д.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#3
|
|||
|
|||
Не уточнил
+ необходимо вычислить промежуток, который нужно докачать.
Как эти алгоритмы мне помогут решить данную задачу? Последний раз редактировалось MotoArhangel, 24.04.2014 в 17:00. |
#4
|
||||
|
||||
При передаче части передавать хеш этой части, по завершению всех передач — передать общий хеш.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#5
|
|||
|
|||
Так. А при перезагрузке компа и последующей попытке докачать файл, как мне хеш части файла поможет, в определении положения места с которого необходимо качать?
|