Логин:     Забыли пароль?
 
Пароль:   Регистрация

Форум / Программирование - Обновление программы  

Обновление программы

casio
casio
Посетитель
Сообщения: 1
[Сообщение #1] ? 8 марта 2014, 15:41
пишу программу для самообновления программы столкнулся с проблемкой, 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;

min@y™
min@y™
Доктор наук
Сообщения: 400
[Сообщение #2] 8 марта 2014, 21:36
Зачем это дело на форуме? Задай вопрос всюда.
Дай ссылку на скачивание твоего ЕХЕ, посмотрю пока.

Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!

Всего сообщений: 2 (сейчас показаны: с 1 по 2)

Перейти в раздел:


 © 2004 - 2024, Delphi.int.ru
Версия форума: 1.10 (19.01.2010)
RSS Delphi.int.ru Expert Код
Выполнено за 0.01 сек.
Обратная связь