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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.01.2010, 12:55   #1
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию Закачка файла из Интернета

Добрый день.
Если я таким кодом...
Код:
procedure TForml .BitBtn1Click(Sender: TObject); 
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;
...загружаю файл из Интернета, то все закачивается отлично, но я не могу сразу обратиться к этому закачанному файлу (пишет, мол, "файл занят другим процессом или приложением"). После перезапуска программы все работает. Как освободить файл сразу после закачки? Спасибо.
_SERGEYX_ вне форума Ответить с цитированием
Старый 18.01.2010, 12:59   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

AssignFile, Reset - создали/открыли, Closefile закрыли... не забываем подчищать.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 18.01.2010, 13:13   #3
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Точно. Спасибо, raxp.
_SERGEYX_ вне форума Ответить с цитированием
Старый 18.01.2010, 14:21   #4
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

И остальное не забываем подчищать.
Код:
InternetCloseHandle(hURL);
InternetCloseHandle(hSession);
Somebody вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Закачка файла происходит в отдельном потоке. Kyran29 Работа с сетью в Delphi 1 28.11.2009 01:19
закачка файла отдельным потоком. ZeitGeist7 Общие вопросы Delphi 12 26.02.2009 20:23
Закачка файла с ссылки Titan123 Работа с сетью в Delphi 5 20.10.2008 13:25
Закачка и сохранение файла с удалённого сервера sKarl PHP 2 19.10.2008 11:51
Закачка файла или как не укачатся Dj_smart Софт 8 02.10.2008 09:39