Исправлено форматирование текста. — SchweinDeBurg
Никто не сталкивался с такой проблемой?
Пытаюсь получить доступ к ftp-файлу с произвольного места, например:
CInternetSession ses;
CFtpConnection ftpCon(&ses,address);
CInternetFile*ftpFile = ftpCon.OpenFile(ftpFilePath,GENERIC_READ);
ftpFile->Seek(10,FILE_BEGIN);
При выполнении метода Seek происходит исключение, появляется окно с сообщением "Операция успешно завершена".
Файл открывается, можно скопировать его на диск, но метод Seek не работает.
Убедительная просьба — использовать коды форматирования при вставке текстов программ.
[ posted via RSDN@Home 1.1.4 stable SR1 r568, accompanied by silence ]
Жаль, что никто не ответил.
Коды форматирования впредь буду использовать.
Похоже, что я не разобрался с библиотекой afxinet.
Странно только она написана.
Пробовал вручную посылать HTTP-запрос:
GET / HTTP/1.0\r\n
Accept: *\/*\r\n
Range: bytes=500-1100\r\n
Host: www.freebsd.org\r\n
\r\n\r\n
Работает отлично, никаких проблем.
Придётся переписывать код, использующий afxinet.
Я выше немного напутал.
Первое сообщение написал для ftp-соединения, а следующее для http.
Мне в моей программе необходимо было использовать и то и другое, поэтому я использовал похожие интерфейсы.
Может кому-нибудь пригодиться:
1. ftp. Для работы с помощью CFtpConnection можно для получения файла с произвольного места (например при дозакачке) необходимо перед открытием ftp файла послать команду:
bool res = ftpCon->Command(TEXT("REST 100"));//для получения файла с 100 байта
И только после этого открывать файл. Метод Seek использовать не нужно.
2. http. Для обеспечения чтения части http-файла проще всего использовать следующее:
CHttpFile* httpFile = httpCon->HttpOpenRequest(L"GET",serverPath/*остальные параметры*/);
httpFile->HttpAddRequestHeaders("Range: bytes=100-500",/*...*/);
3. Как оказалось очень многие ftp- и http-сервера не поддерживают дозакачку.
В случае с ftp, если res в коде выше равен true, то сервер понял команду и поддерживает дозакачку (личный вывод, проверял на нескольких серверах).
4. Оказалось совсем не сложно реализовать клиента на сокетах. Причём даже документации для этого практически не надо. Достаточно взять сервер, пишуший логи и подключиться к нему с помощью far-а или эксплоера.
5. И последнее возвращаясь к методу Seek — я просмотрел множество материалов на эту тему, но мне нигде не удалось найти работающего примера с использованием этого метода. Возможно опять же здесь проблема серверов, к которым я обращался.