Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.02.2013, 15:15   #1
Volkogriz
Форумчанин
 
Аватар для Volkogriz
 
Регистрация: 11.10.2007
Сообщений: 384
Вопрос Скачать файл большого размера

Доброе время суток!
Как скачать файл больше 300мег.
IdHTTP большие не качает!
Поискал нашёл Функции но они качают,
какая четверть какая половину какая 10% )
Есть ли у кого примерчик <<<проверенный!!!>>>
Дайте пожалуйста.
Нашёл даже мнения и утверждения что delphi в обще не поддерживает скачивание файлов из интернета!
Заранее благодарен!
С уважением,
Volkogriz!
Не количеством плюсов измеряется репутация человека...!
Volkogriz вне форума Ответить с цитированием
Старый 20.02.2013, 15:44   #2
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,759
По умолчанию

Когда то писал качалку для Flash Video с некоторых сайтов. Качает хоть по несколько гигов. Вот код потока:
Код:
// процедура скачки
procedure DownLoadThread.Execute;
var
  F: File;
  BufferLen: DWORD;
  hSession, hURL: HInternet;
  Buffer: array[1..1024] of Byte;
  err: boolean;
  FileUrl : PChar;
begin
   MainForm.DownloadProgressBar.Position := 0;
   DwnldSize := 0;
   if Copy (MainForm.SaveDlg.FileName, Length(MainForm.SaveDlg.FileName) - 3,
    Length(MainForm.SaveDlg.FileName))<>'.flv' then
   AssignFile(F, MainForm.SaveDlg.FileName + '.flv') else
   AssignFile(F, MainForm.SaveDlg.FileName); //Свяжемся с файлом
 {IF FileExists(Edit2.Text) then //Есть ли на диске этот файл
   begin
     Reset(f,1); //Ax, есть? Откроем!
     ResumePos := FileSize(F); //Откуда докачать
     Seek(F, FileSize(F)); //А писать будем в конец
   end else} ReWrite(f,1); //А раз нет, так создадим
   MainForm.StopDwnld := false; //Надо качать...
   //Открыли сессию
   hSession := InternetOpen(PChar(ParamStr(0)), PRE_CONFIG_INTERNET_ACCESS, nil, nil, 0);
   //И наш УРЛ
   FileUrl := PChar (MainForm.LinkEncodedEdit.Text);
   hURL := InternetOpenURL(hSession,FileUrl,nil, 0, 0, 0);

   {if ResumePos>0 then //Если докачиваем,
     begin
          lnternetSetFilePointer(hURL,ResumePos,nil,0,0); //То сместимся
     end;}
   REPEAT //Качаем
     err:= InternetReadFile(hURL, @Buffer,SizeOf(Buffer),BufferLen); //Читаем буфер
     IF err= false then //Ошибка чтения
       begin
         MessageBox (MainForm.Handle, 'Файл не доступен. Проверьте интернет cоединение.', 'Ошибка',
          mb_OK or mb_IconError); //Сообщим и выходим
         InternetCloseHandle(hURL); //<-|закрываем
         InternetCloseHandle(hSession); //<-|сесcии
         CloseFile(f); //<-|и файл
         MainForm.DownLoadBtn.Enabled := true;
         MainForm.DecodeBtn.Enabled := true;
         MainForm.StopBtn.Enabled := false;
         MainForm.SpeedTimer.Enabled := false;
         exit;
       end;
     BlockWrite(f, Buffer, BufferLen); //Пишем в файл
     // Показываем на прогресс
     Inc(DwnldSize);
     MainForm.SizeOfDownloading := DwnldSize;
     Synchronize (UpdateProgress);
     Synchronize (DownSizeView);

   UNTIL (BufferLen= 0) Or (MainForm.StopDwnld = true); //Качаем, пока не все или надо
   InternetCloseHandle(hURL); //<-|закрываем
   InternetCloseHandle(hSession); //<-|сесcии
   CloseFile(f); //<-|и файл

   Synchronize (ShowBaloon);
   MainForm.SpeedLabel.Caption := '0 КБ/с';
   MainForm.DownLoadBtn.Enabled := true;
   MainForm.DecodeBtn.Enabled := true;
   MainForm.StopBtn.Enabled := false;
   MainForm.SpeedTimer.Enabled := false;

end;
Там много чего не нужно тебе, т.к. прогресс скачки отображал на форме. Думаю разберёшься.
FaTaL вне форума Ответить с цитированием
Старый 20.02.2013, 15:47   #3
Volkogriz
Форумчанин
 
Аватар для Volkogriz
 
Регистрация: 11.10.2007
Сообщений: 384
По умолчанию

именно эту штуку я и написал, надоело тормоза смотреть))
Всё работает а закачать нормально не как))
Ща ваш код пробовать буду, Спасибо!
С уважением,
Volkogriz!
Не количеством плюсов измеряется репутация человека...!
Volkogriz вне форума Ответить с цитированием
Старый 20.02.2013, 18:01   #4
Volkogriz
Форумчанин
 
Аватар для Volkogriz
 
Регистрация: 11.10.2007
Сообщений: 384
По умолчанию

Не получается доходит до 14 метра и всё (
Вот собственно как я делаю:

Код:
uses
WinInet;

var
  Form1: TForm1;
  ListName:TStringList;

implementation

{$R *.dfm}

function TForm1.CCopyText(S, C1, C2: string): string;
begin
 if C1 <> '' then
 Delete(S, 1, Pos(C1, S) + Length(C1) - 1);
 if C2 <> '' then
 Delete(S, Pos(C2, S), Length(S));
 Result := S;
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
var
S:string;
begin
s:=IdHTTP1.Get(ComboBox1.Text);
ListBox1.Items.Add(utf8toansi(CCopyText(S, '&laquo;', '&raquo;')));
ListName.Add(CCopyText(S, 'player.addVariable(''file'''+', ''', ''');'));
IdHTTP1.Free;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
ListName:=TStringList.Create;
end;

procedure TForm1.ListBox1Click(Sender: TObject);
var
ArrayLen:array[1..1024] of byte;
Len:DWORD;
F:File;
session,url:HInternet;
begin
try
session:=InternetOpen(Pchar(ExtractFileName(Application.ExeName)),INTERNET_OPEN_TYPE_PRECONFIG,nil,nil,0);
url:=InternetOpenUrl(session,PAnsiChar(ListName.Strings[ListBox1.ItemIndex]),nil,0,0,0);
AssignFile(F, extractfilepath(Application.ExeName)+ListBox1.Items.Strings[ListBox1.ItemIndex]+'.flv');
Rewrite(F,1);
repeat
InternetReadFile(url,@ArrayLen,SizeOf(ArrayLen),Len);
BlockWrite(F,ArrayLen,Len);
until
Len=0;
CloseFile(F);
InternetCloseHandle(session);
except
on e:Exception do
end;
end;

end.
Не выходит не чего!(
С уважением,
Volkogriz!
Не количеством плюсов измеряется репутация человека...!

Последний раз редактировалось Volkogriz; 20.02.2013 в 18:12.
Volkogriz вне форума Ответить с цитированием
Старый 21.02.2013, 09:43   #5
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

http://www.programmersforum.ru/showthread.php?t=221386
http://www.programmersforum.ru/showp...97&postcount=8
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Загрузить текстовый файл большого размера в listbox elagin Общие вопросы Delphi 1 04.08.2012 14:49
вывод буквы большого размера masterbet Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 12 30.11.2011 23:57
Delphi 7 и RES файл большого размера acsbaks Общие вопросы Delphi 4 29.11.2011 18:49
Хранение большого размера фото Droid БД в Delphi 0 07.05.2010 01:57
Сохранение книги большого размера. nemoomen Microsoft Office Excel 12 22.03.2009 05:57