CInternetFile не работает метод Seek
От: zzzale  
Дата: 01.02.06 15:18
Оценка:
Исправлено форматирование текста. — SchweinDeBurg

Никто не сталкивался с такой проблемой?
Пытаюсь получить доступ к ftp-файлу с произвольного места, например:

CInternetSession ses;
CFtpConnection ftpCon(&ses,address);


CInternetFile*ftpFile =  ftpCon.OpenFile(ftpFilePath,GENERIC_READ);
ftpFile->Seek(10,FILE_BEGIN);

При выполнении метода Seek происходит исключение, появляется окно с сообщением "Операция успешно завершена".
Файл открывается, можно скопировать его на диск, но метод Seek не работает.
[от модератора]
От: SchweinDeBurg Россия https://zarezky.spb.ru/
Дата: 01.02.06 15:30
Оценка:
Убедительная просьба — использовать коды форматирования при вставке текстов программ.
[ posted via RSDN@Home 1.1.4 stable SR1 r568, accompanied by silence ]
- Искренне ваш, Поросенок Пафнутий
Re: CInternetFile не работает метод Seek
От: zzzale  
Дата: 06.02.06 07:25
Оценка:
Жаль, что никто не ответил.
Коды форматирования впредь буду использовать.

Похоже, что я не разобрался с библиотекой 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.
Re: CInternetFile не работает метод Seek
От: zzzale  
Дата: 16.02.06 11:21
Оценка:
Я выше немного напутал.
Первое сообщение написал для 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 — я просмотрел множество материалов на эту тему, но мне нигде не удалось найти работающего примера с использованием этого метода. Возможно опять же здесь проблема серверов, к которым я обращался.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.