Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как начать скач. файл а с опред. места 
:(
    Опции темы
devmstr
  Дата 29.1.2005, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Developer
**


Профиль
Группа: Участник
Сообщений: 879
Регистрация: 28.4.2004
Где: Ukraine

Репутация: нет
Всего: 11



Как начать скачивать файл не сначала а с определенной позиции.
Вот пример из DRKB, который просто закачивает файл. Люди подскажите. Очень нужно!!!!

Код

function DownloadFile(const Url: string): string;
var
 NetHandle: HINTERNET;
 UrlHandle: HINTERNET;
 Buffer: array[0..1024] of char;
 BytesRead: cardinal;
begin
 Result := '';
 NetHandle := InternetOpen('Delphi 5.x', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);

 if Assigned(NetHandle) then
   begin

     UrlHandle := InternetOpenUrl(NetHandle, PChar(Url), nil, 0, INTERNET_FLAG_RELOAD, 0);

     if Assigned(UrlHandle) then
{ UrlHandle правильный? Начинаем загрузку }
       begin
         FillChar(Buffer, SizeOf(Buffer), 0);
         repeat
           Result := Result + Buffer;
           FillChar(Buffer, SizeOf(Buffer), 0);
           InternetReadFile(UrlHandle, @Buffer, SizeOf(Buffer), BytesRead);
         until BytesRead = 0;
         InternetCloseHandle(UrlHandle);
       end
     else
       begin
{ UrlHandle неправильный. Генерируем исключительную ситуацию. }
         raise Exception.CreateFmt('Cannot open URL %s', [Url]);
       end;

     InternetCloseHandle(NetHandle);
   end
 else
{ NetHandle недопустимый. Генерируем исключительную ситуацию }
   raise Exception.Create('Unable to initialize Wininet');
end;



Это сообщение отредактировал(а) magician - 29.1.2005, 22:53


--------------------
Think different ©Steve Jobs 
user posted image
PM MAIL WWW   Вверх
p0s0l
Дата 29.1.2005, 23:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 1
Всего: 112



М
 
Тему нужно создавать в нужном разделе!




--------------------
С уважением, г-н Посол.
PM   Вверх
p0s0l
Дата 29.1.2005, 23:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 1
Всего: 112



Перенесено из раздела Дельфи
Добавлено @ 00:02
Перед циклом InternetReadFile вызови InternetSetFilePointer для установки позиции скачивания...
Код
InternetSetFilePointer (UrlHandle, <начало скачки>, 0, FILE_BEGIN, 0);




--------------------
С уважением, г-н Посол.
PM   Вверх
devmstr
Дата 30.1.2005, 08:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Developer
**


Профиль
Группа: Участник
Сообщений: 879
Регистрация: 28.4.2004
Где: Ukraine

Репутация: нет
Всего: 11



Громадное спасибо!!
Щас попробую!


--------------------
Think different ©Steve Jobs 
user posted image
PM MAIL WWW   Вверх
devmstr
Дата 30.1.2005, 23:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Developer
**


Профиль
Группа: Участник
Сообщений: 879
Регистрация: 28.4.2004
Где: Ukraine

Репутация: нет
Всего: 11



А вы не подскажете как определить заранее размер закачиваемого файла?



--------------------
Think different ©Steve Jobs 
user posted image
PM MAIL WWW   Вверх
devmstr
  Дата 31.1.2005, 00:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Developer
**


Профиль
Группа: Участник
Сообщений: 879
Регистрация: 28.4.2004
Где: Ukraine

Репутация: нет
Всего: 11



Пробую InternetQueryDataAvailable, но он мне возвращает что-то нереальное.
Хотя вреде как-раз, то что необходимо?

Queries the server to determine the amount of data available.

Syntax
Код

BOOL InternetQueryDataAvailable(
   IN HINTERNET hFile,
   OUT LPDWORD lpdwNumberOfBytesAvailable,
   IN DWORD dwFlags,
   IN DWORD dwContext
);


Parameters

hFile
Valid HINTERNET handle, as returned by InternetOpenUrl, FtpOpenFile, GopherOpenFile, or HttpOpenRequest.

lpdwNumberOfBytesAvailable
Optional. Address of an unsigned long integer variable that receives the number of available bytes.

dwFlags
Reserved. Must be set to zero.
dwContext
Reserved. Must be set to zero.

Например файл 241,534 bytes(ну примерно), а функция возращает 751...
Что делать??

Это сообщение отредактировал(а) magician - 31.1.2005, 00:40


--------------------
Think different ©Steve Jobs 
user posted image
PM MAIL WWW   Вверх
p0s0l
Дата 31.1.2005, 08:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 1
Всего: 112



Можешь попробовать так:
Код
FileSize := InternetSetFilePointer (UrlHandle, 0, 0, FILE_END, 0);
Только потом верни указатель на нужное тебе место...

Добавлено @ 08:44
ЗЫ: только в MSDN сказано, что и так может обламаться:
Цитата(MSDN)
This method fails if the content length is unknown.

Добавлено @ 08:48
А InternetQueryDataAvailable - это не то...
Читай:
Цитата(MSDN)
This function returns the number of bytes of data that are available to be read immediately by a subsequent call to InternetReadFile.
Т.е. она возвращает кол-во байт, которые доступны для мгновенного считывания в последующем вызове InternetReadFile...


--------------------
С уважением, г-н Посол.
PM   Вверх
devmstr
Дата 31.1.2005, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Developer
**


Профиль
Группа: Участник
Сообщений: 879
Регистрация: 28.4.2004
Где: Ukraine

Репутация: нет
Всего: 11



Спасибо!
Бли immediately не заметил! Заработался smile


--------------------
Think different ©Steve Jobs 
user posted image
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0525 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.