Скачивание файла через winsock
В обычном диалоговом окне задается в текстовое поле ссылка на файл. Скачивание через http. Дошел до коннекта до сервера, а дальше не знаю, что делать и как.. Построчно читать файл и записывать в локальную папку? Предложите свои варианты, если можно, с кодом. Буду очень признателен.
Сейчас не могу подойти и узнать точно к компу, поэтому вопрос:
Псевдак:
InternetOpen ...
InternetOpenUrl...
InternetReadFile...
fwrite(....,f);
fclose..
InternetCloseHandle..
InternetCloseHandle..
Так можно?
Так можно?
Да, схема такая. Правда, InternetReadFile() + fwrite() лучше сделать в цикле, читающем/пишущем куски, скажем, по 4 КБ - для скорости.
Плюс, fclose() лучше перенести после всех InternetClose, раз fopen() у тебя перед ними, ну это мелочи.
Но возникла проблема. Качает файл размером в два раза больше. И после первого fwrite вылетает из программы.
Код:
{
FILE* file;
MessageBox(0,"","",0);
GetFileName(fileURL,FileName);
file=fopen(FileName, "w+");
const int BufferSize=1024;
HINTERNET hSession, hURL;
char* Buffer[BufferSize];
DWORD BufferLen;
char* sAppName="FastDownload";
hSession=InternetOpen(sAppName,
INTERNET_OPEN_TYPE_PRECONFIG,
NULL, NULL, 0);
hURL=InternetOpenUrl(hSession,
fileURL,
NULL,0,0,0);
while(BufferLen!=0)
{
InternetReadFile(hURL,Buffer, BufferSize, &BufferLen);
MessageBoxA(0,"Read","Read",0);
fwrite(Buffer,BufferSize,BufferLen,file);
}
fclose(file);
InternetCloseHandle(hURL);
InternetCloseHandle(hSession);
return true;
}
Вообще, должен быть режим записи wb или w+b. Но при этом у меня файл создается пустой(весит 0 байт). И так всегда. Работает только тупо r и w. Вот такая беда :(
И еще вопрос: какой BufferLen(кол-во записываемых байт в fwrite) нужно писать, ведь нам неизвестен размер скачиваемого файла?
upd:
Немного разобрался. Файл скачал. zip.
Но:
1. В свойствах, размер файла "на диске" такой же, как и должен быть. Но обычный размер файла(что выше находится) отличается от нормального в большую сторону).
2. В оригинальном архиве 6 файлов и одна папка с файлами, а в моем скачанном - только 1 файл. И при открытии выскакивает уведомление "Неожиданный конец архива".
Что делать? :)
По-моему у тебя ошибка в fwrite(): fwrite(Buffer,BufferSize,1,file);
Режим открытия тебе нужен "wb", "w+" - для чтения+записи.
У меня вот как сделана подобная функция (Delphi):
const
BufSize = 2048;
var
InetHandle, URLHandle: Pointer;
Buf: array[1..BufSize] of Byte;
BytesRead: DWord;
begin
InetHandle := InternetOpen('any user agent', INTERNET_OPEN_TYPE_PRECONFIG,
NIL, NIL, 0);
try
URLHandle := InternetOpenURL(InetHandle, PChar(URL), nil, 0, 0, INTERNET_FLAG_NO_UI);
try
repeat
if not InternetReadFile(URLHandle, @Buf, SizeOf(Buf), BytesRead) then
BytesRead := 0;
Dest.WriteBuffer(Buf, BytesRead);
until BytesRead = 0;
Result := True;
finally
InternetCloseHandle(URLHandle);
end;
finally
InternetCloseHandle(InetHandle);
end;
end;
открывай файл в бинарном режиме "wb+"
ps: пример качалки
пример смотрел? там "wb" стоит и все работает
upd: Вы не поверите. Вчера все режимы перепробовал - не записывал, кроме как w+. Поклясться могу. Сейчас заработало. Больше всем спасибо! Кто может объяснить такое сверхестественное явление?
upd: Подскажите, а как посчитать скорость скачивания?
Также хотелось бы узнать, как избавиться от того, что окно виснет во время скачивания?
upd2: С потоками я разобрался, чтобы не висло. Теперь интересует вопрос скорости скачивания и скачивания по частям. В коде oxotnik333 оно есть, но там было через socket, а не InternetOpen.. И так же о том, как узнать размер.
Размер файла можешь получить из заголовков юзая HttpQueryInfo с HTTP_QUERY_CONTENT_LENGTH, пример тут.
ByVal strBuffer, lBufLen, 0)
А где мне взять хэндл файла? Он же только локальный.
Напиши мне код человеческий пожалуйста.
upd: Додумался. Работает.
{
InternetReadFile(hURL,Buffer, BufferSize, &BufferLen);
SendMessage(prgbar, PBM_SETSTEP, (WPARAM)1,BufferSize);
fwrite((char*)&Buffer,sizeof(char),BufferLen,file);
SendMessage(prgbar, PBM_STEPIT, 0,0);
}
И какой SetRange установить?
upd:
Как создать изображение на кнопке? Если она в ресурсах.
И как узнать размер с фтп?
upd:
Не качаются .exe-файлы. Почему?
Это уже на форуме мильон раз обсуждалось.
Набираем в гугле фразу "Retrieves the size of a file from the FTP site" и открываем 4-й сайт сверху.
С таким же успехом можно спросить почему небо синее. Может какой-то фильтр блокирует exe, да и что вообще значит, что не качается? Приходят битыми, не приходят (возврат из функций Internet*) или что-то ещё?
С exe разобрался и с кнопками тоже в тот же день.
Вот теперь вопрос такой: Как правильно узнать размер уже скачанной части?
Если делать bytesread+=strlen(Buffer); - то не сходится с размером, полученным по http-запросу.
Блин. Опять решил сразу после того, как написал. Додумался сделать так:
bytesread+=fwrite((char*)&Buffer,sizeof(char), BufferLen,file);
Осталось лишь узнать размер с фтп...
фото голых ног девушек - Скачать бесплатно 3d порно анимэ голая даша букина на фото голая наталья бочкарёва - Онлайн ролики извращенцев Порно видео онлайн в гаражах частное африканки голые, сексуальные девочки в блестящих чулках фото, порно видео для телефонов скачать бесплатьно - кастинг секс порно онлайн дед трахается сисястые целочки, с хуя ли баня упала - трахнуть шимпанзе, гиперсексуальность фото - порно с ириной розановой, Письки киски до 16 Скачать порнофото беременные - бесплатная скачка эротических картинак высокого качества. порно латиноамериканки. - средний был гермафродит сам ебёт и сам родит, Смотреть инцесты без смс и без регистрации тетка и племянник порно скачать Скачать секс с женщиной онлайн порно видео бесплатно уроки лизания - на свиданки сын трахнул маму - Смотреть онлайн порно видео скрытая камера порно.фильмы бесплатно аниме. трахают жанну фриске - порно насти мельниковой порно с участием героев диснея - клитор девочки онлайн. смотреть онлайн лесби ануслинг бабушки с внуками порно -
Порноонлайн медосмотр худенькие голые женщины, порно онлаин взрослие - бесплатное порно в онлайм. анальные принцессы онлайн ей нравится когда ее лижут порно онлайн - Скачать порнофото беременные - беплатное порно культуристки, пососи эротические фото толстушек бесплатно без регистрации, Порно ролики взрослых волосатых женщин фото розги. порно сайт сучка ру 2040 porno онлайн - секс со старыми смотреть видео бесплатно без регистрации и смс смотреть фото порно Секс мастурбация во время беременности видео Смотреть русское видео порно зрелых домохозяек ххх фото курниковой Секс видио смотртеть бесплатно Скачать порно быстро и бесплатно без регистрации Актриса ольга полякова порно смотреть русский инцест бесплатно онлайн Скачать порнофото беременные - выебал в анал собственную мать bezplatno короткая ебля без смс и регистрации, ролики порно безплатно качать, он трахает бабушку смотреть онлайн, минет молодой брюнетки фото онлайн - бесплатно главная пизда, Скачать порнофото беременные -
брат трахнул младшую сестру видео смотреть онлайн - трах брат сестру, Бесплатно.Порно.Видео.Без смс.Пьяная мама и ее с Видио эротика онлайн бесплатно порно со сзнаменитостями - все что мне в ней казалось загадочным и богатым внутренним миром оказалось просто ебанутостью. смешные порно фото приколы, девственые письки фото онлайн - порка кнутом видео скачать. интимные места видео - показать ранеток в сексе, Порно сотреть онлан скачать бесплатно порно с claudia wennstrom, Бесплатно порно-видео плевы лишили порно онлайны мамы - aion где вставляет божественный камень, отличный русский фистинг rapidshare - порно секретарш скачать бесплатно, видео порно кэйти прайс, домашнее видео порноролики эротичиские фота блондинак, порно бесплатно без регистрации смотреть онлайн минет, порно фото голые телки попки под юбкой трусики галерея. порно рабы - stalker сталкер eli cross vivid 2008 г all sex dvdrip, порно звезды бесплатное фото Бесплатно скачать жесткое порно видео