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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.08.2014, 19:17   #1
Halogen
Пользователь
 
Аватар для Halogen
 
Регистрация: 23.11.2013
Сообщений: 46
Вопрос WinInet Файл скачан полностью?

Добрый час, суть вопроса в заголовке, как можно узнать скачан файл полностью или же закачка была прервана или с ошибкой?
Качаю так
Код:
function GetInetFile(const fileURL, FileName: string): boolean;
const
  BufferSize = 1024;
var
  hSession, hURL: HInternet;
  Buffer: array[1..BufferSize] of Byte;
  BufferLen: DWORD;
  f: file;
  sAppName: string;
begin
  Result := False;
  sAppName := ExtractFileName(Application.ExeName);
  hSession := InternetOpen(PChar(sAppName),
  INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
  try
    hURL := InternetOpenURL(hSession, PChar(fileURL), nil, 0, 0, 0);
    try
      AssignFile(f, FileName);
      Rewrite(f,1);
      repeat
        InternetReadFile(hURL, @Buffer, SizeOf(Buffer), BufferLen);
        BlockWrite(f, Buffer, BufferLen);
      until
        BufferLen = 0;
      CloseFile(f);
      Result := True;
    finally
      InternetCloseHandle(hURL);
    end;
  finally
    InternetCloseHandle(hSession);
  end;
end;
Halogen вне форума Ответить с цитированием
Старый 14.08.2014, 19:49   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

В статье http://procoder.info/index.php/entry/html-naraspashku/ я привожу пример с обработкой ошибок закачки. Можешь им воспользоваться для правки своей программы.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.08.2014, 21:28   #3
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

поставить expert после кода в try.
Если Expert сработало значит произошла ошибка.
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 14.08.2014, 21:41   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
поставить expert после кода в try.
Если Expert сработало значит произошла ошибка.
Да? Только тут есть одна нисрастуха - эти Win API (Вообще-то почти все Винапи) через try...except не ловятся. Поэтому нужно анализировать что возвращают функции. Так что ты не прав.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.08.2014, 21:49   #5
Halogen
Пользователь
 
Аватар для Halogen
 
Регистрация: 23.11.2013
Сообщений: 46
По умолчанию

Stilet, спасибо за статью очень познавательно, нашел пример хороший, если поковырять чутка будет то что нужно, всем спасибо можно закрывать
Halogen вне форума Ответить с цитированием
Старый 14.08.2014, 21:54   #6
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Да? Только тут есть одна нисрастуха - эти Win API (Вообще-то почти все Винапи) через try...except не ловятся. Поэтому нужно анализировать что возвращают функции. Так что ты не прав.
Интересно почему? Должны по идее ловится.
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 14.08.2014, 22:02   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Интересно почему?
http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx
Цитата:
if a call to InternetReadFile does not result in a completed transaction, it will return FALSE and a subsequent call to GetLastError will return ERROR_IO_PENDING. When the transaction is completed the InternetStatusCallback specified in a previous call to InternetSetStatusCallback will be called with INTERNET_STATUS_REQUEST_COMPLETE.
У винды своя система отлова ошибок. Впрочем не только у винды. Эксепшн не для таких ошибок предназначены.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как открыть файл? Полностью. -=Prorok=- C# (си шарп) 2 04.10.2011 17:42
WinInet страница с Яндекса не загружается полностью Son Работа с сетью в Delphi 0 18.04.2011 20:50
CStdioFile не полностью пишет данные в файл metoflex Общие вопросы C/C++ 1 04.02.2011 17:21
Полностью сохранить форму в файл как .dfm anton14 Общие вопросы Delphi 5 16.10.2010 18:42
WinInet загрузить файл во временной файл , использовать, потом удалить Человек_Борща Работа с сетью в Delphi 5 03.08.2010 13:46