|
#1
|
|||
|
|||
Скачивание файла
1. Недавно начал делать прогу которая скачивает файлы из интернета. При скачивании форма тормозит. Что надо сделать чтобы форма не тормозила при скачивании?
2. Как определить размер скачиваемого файла в килобайтах? Заранее спасибо |
#2
|
||||
|
||||
Чем качаешь? Если IdHTTP, то в событии OnWorkBegin есть константа - AWorkCountMax содержит размер файла в байтах.
Чтобы не тормозила программа добавь на форму компонент IdAntiFreez Что делать, когда сломался комп: 1. Если вы юзер - делать ноги. 2. Если ремонтник - делать деньги. 3. Если вы программист - делать вид, что так было задумано. |
#3
|
|||
|
|||
Вот код. Shadow спасибо за антифриз
Код:
var F: File; ResumePos, BufferLen, SumSize: DWORD; hSession, hURL: Hlnternet; Buffer: array[1..1024] of Byte; err: boolean; begin SumSize := 0; ResumePos := 0; //Инициализируемся AssignFile(F, Edit2.Text); //Свяжемся с файлом IF FileExists(Edit2.Text) then //Есть ли на диске этот файл begin Reset(f,1); //Ax, есть? Откроем! ResumePos := FileSize(F); //Откуда докачать Seek(F, FileSize(F)); //А писать будем в конец end else ReWrite(f,1); //А раз нет, так создадим NADO := TRUE; //Надо качать... //Открыли сессию hSession := lnternetOpen('X-Kachalka', PRE_CONFIG INTERNET_ACCESS, nil, nil, 0); //И наш УРЛ hURL := lnternetOpenURL(hSession,PChar(Edit1.Text),nil, O, 0, O); //Сколько там наш файл весит? lnternetQueryDataAvailable(hURL, SumSize, 0, 0); labe4.Caption := IntToStr(SumSize); //Сообщим об этом if ResumePos>0 then //Если докачиваем, begin lnternetSetFilePointer(hURL,ResumePos,nil,0,0); //То сместимся end; REPEAT //Качаем err:= lnternetReadFile(hURL, @Buffer,SizeOf(Buffer),BufferLen); //Читаем буфер IF err= false then //Ошибка чтения begin ShowMessage ('Произошел облом :('); //Сообщим и выходим exit; end; BlockWrite(f, Buffer, BufferLen); //Пишем в файл Application. Processmessages; UNTIL (BufferLen- 0) Or (NADO= FALSE); //Качаем, пока не все или надо ShowMessage ('Успешно загружено!'); end; |