Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.06.28;
Скачать: CL | DM;

Вниз

работа с WinInet   Найти похожие ветки 

 
_Андрей   (2009-05-14 12:08) [0]

Добрый день, была такая задача, заделать небольшой ftp-клиент для выгрузки инфы на сервер, крайне желательно чтобы присутствовала возможность асинхронной работы, программка для одной машины, так что решил задействовать WinInet (как раз хотел поближе с этой библиотечкой познакомиться).

Всё было нормально до того как дошёл до реализации некоторых функций. Загвоздка вот в чём: для функций, например, FtpGetFile и FtpPutFile есть возможность указать некую переменную (dwContext) для последущей обработки возникающих событий.

А у функции FtpCreateDirectory, например, такого параметра нету вообще, при её вызове она всегда возвращает false а GetLastError = 997 ERROR_IO_PENDING (Перекрытая операция ввода-вывода) и фсё... как узнать о завршении операции - непонятно. Собственно это первое о чём хотел спросить.

Так и не поняв как работают эти функции решил воспользоваться FtpCommand, с ней проблем тоже - туева хуча:
 - описание в MSDN и прототип в WinInet не соответствуют
 - сама шлёт команды, например при посылке мной "MKD" она до кучи отсылает TYPE (это ещё куда ни шло), а затем PORT (это вообще непонятно, нафига открывать соединение данных если я пердачу файлов не запрашиваю)
 - достаточно странный способ получения ответов от сервера

Работа FtpCommand - это второй интересующий момент.

И ещё одна загвоздка, с вызовом InternetCloseHandle, понятно что в случае асинхронной работы она не может немедленно закрыть соединение, но при вызове этой функции я получаю только одно "событие" - INTERNET_STATUS_RECEIVING_RESPONSE, после этого приложение подвисает (возврата из InternetCloseHandle нет, никаких событий больше не генериться). Вот и хотел ещё спросить, можно ли заканчивать работу программки вообще без вызовов этой функции?

Буду очень признателен за помощь...

P.S. Все вопросы на форуме касающиеся WinInet я прочитал, здесь некоторые моменты повторяются, сделал так сознательно чтобы не было необходимости копаться в других темах.


 
Anatoly Podgoretsky ©   (2009-05-14 13:17) [1]

В ФТП протоколе создание папки узнается или попыткой входа в нее или перечитывание списка файлов и папок.


 
_Андрей   (2009-05-14 13:35) [2]

Вопрос не в этом, пускай я после вызова FtpCreateDirectory вызвал FtpSetCurrentDirectory, она мне тоже определённо ничего не скажет (в случае асинхронного вызова просто вернёт false и GetLastError = ERROR_IO_PENDING), то же самое что и FtpCreateDirectory


 
Anatoly Podgoretsky ©   (2009-05-14 14:07) [3]

> _Андрей  (14.05.2009 13:35:02)  [2]

В случае ассинхронного вызова большего узнать и нельзя, поскольку все остальное делается в обработчиках, сообственно об этом и говорит GetLastError.


 
_Андрей   (2009-05-14 14:22) [4]

Так почему тогда на FtpGetFile есть возможность навесить обработчик, а на FtpCreateDirectory нет, выходит ведь так?


 
Anatoly Podgoretsky ©   (2009-05-14 14:27) [5]

Ну и что, ну на FtpGetFile есть возможность навесить обработчик, а на FtpCreateDirectory нет.



Страницы: 1 вся ветка

Текущий архив: 2009.06.28;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.007 c
15-1240209257
ford
2009-04-20 10:34
2009.06.28
почитать про IFilter


15-1240382718
Mulber
2009-04-22 10:45
2009.06.28
Минимизация формы без возможности восстановления


15-1239906098
Kolan
2009-04-16 22:21
2009.06.28
«Интерфейс пользователя» → Инфоскроллер


2-1241710479
sergeii
2009-05-07 19:34
2009.06.28
Использование функций из другого *.pas faila


3-1222849323
Александр999
2008-10-01 12:22
2009.06.28
Проверка на существование БД перед запуском приложения