Форум Программирование Обновление программы |
|
пишу программу для самообновления программы столкнулся с проблемкой, ex-e файлы почему то не скачивает, то есть якобы скачал но из 2мб получается 17кб. winrar-ские файлы скачивает вот код: function ExtractUrlFileName(url: string): string; var A: LongInt; begin // извлекаем название файла из ссылки result := ''; A := LastDelimiter('/', url); if (A > 0) and (url[A] = '/') then result := Copy(url, A + 1, Length(url) - A); end; function GetInetFileSize(const FileUrl: string): integer; var IdHTTP: TIdHTTP; begin result := -1; // Ставим первоначальное значение -1, потом поймёте зачем IdHTTP := TIdHTTP.Create(nil); try IdHTTP.Head(FileUrl); // Мы получаем только заголовок нашего файла, где хранится размер файла, код запроса и т.п. if IdHTTP.ResponseCode = 200 then // Если файл существует, то... (200 это успешный код: HTTP OK) result := IdHTTP.Response.ContentLength; // В результат пихаем наш размер файла в байтах. except IdHTTP.Free; end; end; procedure TDownload.Execute; const BufferSize = 1024; var stream: TMemoryStream; FName: String; http: TIdHTTP; begin FName := 'C:\' + ExtractUrlFileName(Form13.ed.Text); http := TIdHTTP.Create(nil); http.OnWork := OnWork; http.OnWorkBegin := OnWorkBegin; http.OnWorkEnd := OnWorkEnd; stream := TMemoryStream.Create; size := GetInetFileSize(Form13.ed.Text); // Узнаём размер файла if size > 0 then try sizes := floattostr(RoundTo(size / (1024 * 1024), -2)); // Переводим в МБ Form13.lb2.Caption := 'Размер на сервере: ' + sizes + ' MB.'; // sizes:=floattostr(RoundTo(size/(1024) , -2)); //Переводим в KB http.get(Form13.ed.Text, stream); // Начинаем скачивание stream.SaveToFile(FName); // Сохраняем except FreeAndNil(http); // Завершаем HTTP FreeAndNil(stream); // Завершаем Stream end else Showmessage('Ошибка при скачивании файла!'); // Если размер файала меньше 0, то выводим сообщение. end; procedure TDownload.OnWork(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Int64); begin Form13.gud.Progress := AWorkCount; // Вбимаем кол-во скачанного Form13.lb.Caption := 'Всего загружено: ' + floattostr (RoundTo(AWorkCount / (1024 * 1024), -2)) + ' MB.'; end; procedure TDownload.OnWorkBegin(ASender: TObject; AWorkMode: TWorkMode; AWorkCountMax: Int64); begin Form13.gud.MaxValue := AWorkCountMax; // За макс. граничей прогресса, у нас будет размер файла Form13.bt.Caption := 'Загружаем...'; end; procedure TDownload.OnWorkEnd(Sender: TObject; AWorkMode: TWorkMode); begin Form13.gud.Progress := 0; // После завершения загрузки, прогресс = 0 Form13.bt.Caption := 'Готово!'; end; procedure TForm13.btClick(Sender: TObject); begin TDownload.Create(false); end; | ||||||
|
Зачем это дело на форуме? Задай вопрос всюда. Дай ссылку на скачивание твоего ЕХЕ, посмотрю пока. Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! | ||||||
Перейти в раздел:
© 2004 - 2024, Delphi.int.ru |
Версия форума: 1.10 (19.01.2010) |
Выполнено за 0.02 сек. |