Существует такая ситуация:
У меня есть программа, она автоматически обновляется через интернет. Обновление происходить с помощью другого EXE файла. то есть главная закрывается и открывается апдейтер, который удаляет страрую версию основной программы и скачивает новую.
Загрузка происходит с помощью:
Код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | function GetInetFile( const fileURL, FileName: String ): boolean ;
const BufferSize = 1024 ;
var hSession, hURL: HInternet;
Buffer: array [ 1.. BufferSize] of Byte ;
BufferLen: DWORD;
f: File ;
sAppName: string ;
begin
Result:= False ;
sAppName := ExtractFileName(Application . ExeName);
hSession := InternetOpen( PChar (sAppName), INTERNET_OPEN_TYPE_PRECONFIG,
nil , nil , 0 );
try
hURL := InternetOpenURL(hSession,
PChar (fileURL), nil , 0 , 0 , 0 );
try
AssignFile(f, FileName);
Rewrite(f, 1 );
repeat
InternetReadFile(hURL, @Buffer, SizeOf(Buffer), BufferLen);
BlockWrite(f, Buffer, BufferLen)
until BufferLen = 0 ;
CloseFile(f);
Result:= True ;
finally
InternetCloseHandle(hURL)
end
finally
InternetCloseHandle(hSession)
end
end ;
|
Ну при нажатии на кнопку эта часть:
Код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | var FileOnNet, LocalFileName: string ;
verin:tinifile;
begin
FileOnNet:= '...' ;
LocalFileName:= 'project2.exe' ;
application . ProcessMessages;
if GetInetFile(FileOnNet,LocalFileName)= True then
begin
ShowMessage( 'Обновление завершено!' );
verin:=tinifile . Create( 'VerIn.ini' );
verin . WriteString( 'Ver' , 'Ver' , edit1 . Text);
end
else
ShowMessage( 'Ошибка! Проверьте ваши настройки интернета. При необходимости обратитесь в тех службу.' );
|
Так теперь собстенно проблема в другом. Мне надо получать размеры файлов на сервере и на компе. На компе я получаю с помощью:
Код:
1 2 3 4 5 6 7 8 9 10 11 12 | function GetFileSize(FileName: String ): Integer ;
var
FS: TFileStream;
begin
try
FS := TFileStream . Create(Filename, fmOpenRead);
except
Result := - 1 ;
end ;
if Result <> - 1 then Result := FS . Size;
FS . Free;
end ;
|
А на сервере:
Код:
1 2 3 4 5 6 7 | HTTP := TIdHTTP . Create( nil );
Razmer := HTTP . Response . ContentLength;
HTTP . Free;
Razmer := Round (Razmer / 1024 );
Edit3 . text:=IntToStr (Razmer) + ' KB' ;
|
Проблема в том, что при загрузке значение размера файла на компе должно меняться каждое мгновение, но это не происходит, программа на время загрузки просто подвисает, а потом выдает, что успешно обновился. Как можно решить данную проблему