Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

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

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 6 519

/ вопрос открыт /

Здравствуйте, уважаемые эксперты!
пишу программу для самообновления программы столкнулся с проблемкой, ex-e файлы почему то не скачивает, то есть якобы скачал но из 2мб получается 17кб. winrar-ские файлы скачивает

вот код:

К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)

Приложение:
  1. function ExtractUrlFileName(url: string): string;
  2. var
  3. A: LongInt;
  4. begin
  5.  
  6. result := '';
  7. A := LastDelimiter('/', url);
  8. if (A > 0) and (url[A] = '/') then
  9. result := Copy(url, A + 1, Length(url) - A);
  10. end;
  11.  
  12. function GetInetFileSize(const FileUrl: string): integer;
  13. var
  14. IdHTTP: TIdHTTP;
  15. begin
  16.  
  17. IdHTTP := TIdHTTP.Create(nil);
  18. try
  19.  
  20.  
  21.  
  22. except
  23. IdHTTP.Free;
  24. end;
  25. end;
  26.  
  27. procedure TDownload.Execute;
  28. const
  29. BufferSize = 1024;
  30. var
  31. stream: TMemoryStream;
  32. FName: String;
  33. http: TIdHTTP;
  34. begin
  35. FName := 'C:\' + ExtractUrlFileName(Form13.ed.Text);
  36. http := TIdHTTP.Create(nil);
  37. http.OnWork := OnWork;
  38. http.OnWorkBegin := OnWorkBegin;
  39. http.OnWorkEnd := OnWorkEnd;
  40. stream := TMemoryStream.Create;
  41.  
  42. if size > 0 then
  43. try
  44.  
  45.  
  46.  
  47.  
  48.  
  49. except
  50.  
  51.  
  52. end
  53. else
  54.  
  55. end;
  56.  
  57. procedure TDownload.OnWork(ASender: TObject; AWorkMode: TWorkMode;
  58. AWorkCount: Int64);
  59. begin
  60.  
  61.  
  62. (RoundTo(AWorkCount / (1024 * 1024), -2)) + ' MB.';
  63. end;
  64.  
  65. procedure TDownload.OnWorkBegin(ASender: TObject; AWorkMode: TWorkMode;
  66. AWorkCountMax: Int64);
  67. begin
  68.  
  69.  
  70. end;
  71.  
  72. procedure TDownload.OnWorkEnd(Sender: TObject; AWorkMode: TWorkMode);
  73. begin
  74.  
  75.  
  76. end;
  77.  
  78. procedure TForm13.btClick(Sender: TObject);
  79. begin
  80. TDownload.Create(false);
  81. end;


casio Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: casio (статус: Посетитель)
Вопрос отправлен: 9 марта 2014, 12:53
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 26; последнее сообщение — 9 марта 2014, 18:08; участников в обсуждении: 2.

Страницы: [« Предыдущая] [1] [2]

casio

casio (статус: Посетитель), 9 марта 2014, 16:19 [#21]:

min@y™: четенько :-) так и сделаю! +1 ;-)
min@y™

min@y™ (статус: Доктор наук), 9 марта 2014, 16:20 [#22]:

Цитата (casio):

не ну на вкус и цвет товарища нет :-) ключик до 15 года надыбал и все четенько!

Я компами с 1990 года занимаюсь, перепробовал просто дохрена антивирусов (а как в инет полез - и файрволлов). Остановил свой выбор на том комбайне, что у меня в данный момент. Лет 5, наверное, юзаю и бед не знаю. Ставлю на все компы, с которыми приходится иметь дело, пока никто не жаловался.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
min@y™

min@y™ (статус: Доктор наук), 9 марта 2014, 16:47 [#23]:

Вот тебе до кучи ещё от меня немного кода. А то, чтой-то мне не нравится твоя конструкция типа:
sizes := floattostr(RoundTo(size / (1024 * 1024), -2)); // Переводим в МБ
У меня оно как-то попроще, что-ли...
// Преобразование размера файла в строку
function FileSize2Str(const ASize: Int64): string;
begin
  if ASize < 1024
    then Result:= IntToStr(ASize) + ' байт'
    else if ASize < 1048576
           then Result:= FloatToStrF(ASize / $400, ffFixed, 15, 2) + ' Кб' //IntToStr(ASize div 1024) + ' Кб'
           else Result:= FloatToStrF(ASize / $100000, ffFixed, 15, 2) + ' Мб'; //IntToStr(ASize div 1048576) + ' Мб'
end;
Вот ещё, на всякий случай:
function Speed2Str(const ASpeed: Cardinal): string;
// Форматирование скорости закачки в строку.
// Параметр ASpeed - скорость в байт/сек
var
  sp: Double;
  Suffix: string;
begin
  if ASpeed < 1048576 // < 1МБ/с
    then begin
           Suffix:= ' Кб/с';
           sp:= ASpeed / 1024;
         end
    else begin // >= 1МБ/с
           Suffix:= ' Мб/с';
           sp:= ASpeed / 1048576;
         end;
 
  //Result:= FloatToStrF(sp, ffFixed, 2, 2) + Suffix;
  Result:= FormatFloat('0.00', sp) + Suffix;
end;
Ну и вот ещё:
// Извлечение имены файла из прямой ссылки
function ExtractFileNameFromURL(const AURL: string): string;
var
  Index: Integer;
begin
  Result:= '';
 
  for Index:= Length(AURL) downto 1 do
    if AURL[Index] <> '/'
      then Result:= AURL[Index] + Result
      else Break;
end;
З.Ы. Когда мне было надо делать закачку из инета, чой-то было стрёмно как-то юзать Indy или какие другие компоненты. Написал вручную (так отлаживать проще) с помощью API-функций из WinInet.pas. Могу дать исходник посмотреть.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
casio

casio (статус: Посетитель), 9 марта 2014, 16:58 [#24]:

min@y™: давай)
min@y™

min@y™ (статус: Доктор наук), 9 марта 2014, 17:06 [#25]:

Цитата (casio):

давай

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

casio (статус: Посетитель), 9 марта 2014, 18:08 [#26]:

min@y™: псб )

Страницы: [« Предыдущая] [1] [2]

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 25 апреля 2026, 23:26
Выполнено за 0.04 сек.