powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / wininet - InternetFindNextFile - ERROR_IO_PENDING
5 сообщений из 5, страница 1 из 1
wininet - InternetFindNextFile - ERROR_IO_PENDING
    #32442768
Bayburin Marat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код следующий
hInternetOpen:= InternetOpen( 'DownLoad Updates',
INTERNET_OPEN_TYPE_PRECONFIG,
nil,
nil,
INTERNET_FLAG_ASYNC);
if Assigned(hInternetOpen) then
begin
hInternetConnect:= nil;
hInternetConnect:= InternetConnect( hInternetOpen,
'192.168.116.129',
INTERNET_DEFAULT_FTP_PORT,
'username',
'password',
INTERNET_SERVICE_FTP,
0,
0);
if Assigned(hInternetConnect) then
begin
hFindFile:= nil;
hFindFile:= FtpFindFirstFile( hInternetConnect,
'*.*',
Win32FindDataA,
INTERNET_FLAG_NEED_FILE,
0); // эта команда выполняется нормально
if Assigned(hFindFile) then
begin
repeat
ListBox1.AddItem(string(Win32FindDataA.cFileName), nil);

until not(InternetFindNextFile( hFindFile, @Win32FindDataA)); // здесь стабильно ошибка ERROR_IO_PENDING при первом же цикле выполнения
InternetCloseHandle(hFindFile);
end;
InternetCloseHandle(hInternetConnect);
end;
InternetCloseHandle(hInternetOpen);

Может кто знает в чем проблема - все хендлы порождаются и уничтожаются нормально все работает нормально во только из-за этой ошибки отображается только один файл с сервера - тот который с получен с помощью FtpFindFirstFile

Извените что код на Паскале - но я думаю проблем не будет
...
Рейтинг: 0 / 0
wininet - InternetFindNextFile - ERROR_IO_PENDING
    #32442896
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
until not(InternetFindNextFile( hFindFile, @Win32FindDataA)); // здесь стабильно ошибка ERROR_IO_PENDING при первом же цикле выполнения 
InternetCloseHandle(hFindFile); 
end; 


Есть в WinAPI функция GetLastError() не знаю, как она в паскале...

Вобщем надо проверять
until not(ERROR_NO_MORE_FILES != GetLastError())
вместо
until not(InternetFindNextFile( hFindFile, @Win32FindDataA));

InternetFindNextFile - возвращает 1 если у него с файлом какие-то проблемы, но не в случае, что все файлы кончились, то бишь, если он вернул 1, тебе этот файл в список вносить не нужно.
...
Рейтинг: 0 / 0
wininet - InternetFindNextFile - ERROR_IO_PENDING
    #32443365
Bayburin Marat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 CEMb

Огромное тебе спасибо за ответ - не повериш но утра раскинул вопрос по разным форумам и вот уже 9 часов вопрос лежит и только первый ответ подоспел...

Кадал вопрос на разные форумы но вот первым ответ пришел с форума о С++


так вот теперь о теме

в MSDN говорится иммено так проверять успешность выполнения InternetFindNextFile а потом уже GetLastError дает тебе информацию о типе ошибке

а то что предложил until not(ERROR_NO_MORE_FILES != GetLastError()) я конечно попробовал - код впадает в бесконечный цикл топомучто всегда GetLastError() = ERROR_IO_PENDING
...
Рейтинг: 0 / 0
wininet - InternetFindNextFile - ERROR_IO_PENDING
    #32443981
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
ERROR_IO_PENDING

Ага. Вобщем вот что я нашёл: если такая ошибка возникает, значит файл занят на IO. И, вроде как такая штука возникает тока на асинхронных операциях.

Попробуй убрать в InternetOpen флаг INTERNET_FLAG_ASYNC...
В msdn'е написано, кстати, что только InternetReadFile и InternetQueryDataAvailable могут выполняться с этим флагом (что-то странно...)

Или.
Заводишь через InternetSetStatusCallback() колбак, который возвращает состояние канала и по нему определяешь, можно к серверу лезть или нет.

Или.
Нашёл функцию FtpFindNextFile (!!!) в стратьях! Причём нету её в описаниях функций в msdn и нету её в dll-инах.... Чё это за функция такая, не знаю... Но там же написано, что FtpFindFirstFile и FtpFindNextFile типа подобны виндовским FindFirstFile и FindNextFile...
...
Рейтинг: 0 / 0
wininet - InternetFindNextFile - ERROR_IO_PENDING
    #32444953
Bayburin Marat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 CEMb

спасибо за ответ - сегодня ночью наконец -то нашел - убрать в InternetOpen флаг INTERNET_FLAG_ASYNC - тогда все нормально работает иначе файл занят предыдущей операцией -


спасибо, Bayburin Marat
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / wininet - InternetFindNextFile - ERROR_IO_PENDING
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]