Wolfgang Ehrhardt
In your module hash.pas - error:
procedure HashFile(..)
..
while (Err=0) and not eof(f) do begin
system.blockread(f,buf,bsize,L);
Err := IOResult;
HUpdateXL(Context, @buf, L);
end;
..
i.e. check eof(f) - symbol (->). When this symbol exist - calculation
of sum (MD5 & other) is stoped. Final sum is not rights.
Must be:
while (Err=0) and (L > 0) do begin
system.blockread(f,buf,bsize,L);
Err := IOResult;
HUpdateXL(Context, @buf, L);
end;
That's Ok.
Centaur
На ^Z проверяются обычно текстовые файлы, а то что он делает -
это
AssignFile(FromF, FileName);
Reset(FromF, 1);
while (NumRead > 0) do
begin
BlockRead(FromF, Buf, SizeOf(Buf), NumRead);
...
end;
CloseFile(FromF);
(я не знаю, как это открытие файлов называется но оно аналогично CreateFile(Name,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE, NULL,OPEN_EXISTING,FILE_FLAG_SEQUENTIAL_SCAN,NULL);
эти файлы проверяются, пока буфер не будет нулевым. А он почему-то проверял на ^Z. Для маленьких файлов это сходило, потому что вероятность попадания на ^Z в начале буфера мала. А для больших соответственно вероятность растет. Я исправил -проверил -работает на всех файлах.
------------------------
а, ну да - ты прав!
А он почему-то проверял на ^Z. Для маленьких файлов это сходило, потому что вероятность попадания на ^Z в начале буфера мала.
Да покажи, где он проверял на ^Z! Я про то и пишу, что не на ^Z, а на pos >= size. То есть патч проблему решает, но не по той причине, которую предполагал его автор.
обнаружил особенность использования MD5Arc.
если проге не хватает прав создать рядом с собой ini-файл, то она молча не работает — завершается, не вычислив md5, и без сообщений об ошибке (в том числе errorlevel = 0). такая ситуация может возникнуть, в частности, под Win7 с UAC, если прога лежит в папке с ограниченными правами.
копирование к проге готового ini-файла вроде бы исправляет ситуацию.
UPD.
выше речь шла о папке, созданной самим юзером, например, в корне диска. если прога лежит в папке WINDOWS, то работает механизм virtualstore, и проблемы с созданием ini-файла не возникает.