|
|
|
wininet - InternetFindNextFile - ERROR_IO_PENDING
|
|||
|---|---|---|---|
|
#18+
Код следующий 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 Извените что код на Паскале - но я думаю проблем не будет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2004, 08:04 |
|
||
|
wininet - InternetFindNextFile - ERROR_IO_PENDING
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. Есть в WinAPI функция GetLastError() не знаю, как она в паскале... Вобщем надо проверять until not(ERROR_NO_MORE_FILES != GetLastError()) вместо until not(InternetFindNextFile( hFindFile, @Win32FindDataA)); InternetFindNextFile - возвращает 1 если у него с файлом какие-то проблемы, но не в случае, что все файлы кончились, то бишь, если он вернул 1, тебе этот файл в список вносить не нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2004, 10:12 |
|
||
|
wininet - InternetFindNextFile - ERROR_IO_PENDING
|
|||
|---|---|---|---|
|
#18+
2 CEMb Огромное тебе спасибо за ответ - не повериш но утра раскинул вопрос по разным форумам и вот уже 9 часов вопрос лежит и только первый ответ подоспел... Кадал вопрос на разные форумы но вот первым ответ пришел с форума о С++ так вот теперь о теме в MSDN говорится иммено так проверять успешность выполнения InternetFindNextFile а потом уже GetLastError дает тебе информацию о типе ошибке а то что предложил until not(ERROR_NO_MORE_FILES != GetLastError()) я конечно попробовал - код впадает в бесконечный цикл топомучто всегда GetLastError() = ERROR_IO_PENDING ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2004, 12:58 |
|
||
|
wininet - InternetFindNextFile - ERROR_IO_PENDING
|
|||
|---|---|---|---|
|
#18+
Код: plaintext Ага. Вобщем вот что я нашёл: если такая ошибка возникает, значит файл занят на IO. И, вроде как такая штука возникает тока на асинхронных операциях. Попробуй убрать в InternetOpen флаг INTERNET_FLAG_ASYNC... В msdn'е написано, кстати, что только InternetReadFile и InternetQueryDataAvailable могут выполняться с этим флагом (что-то странно...) Или. Заводишь через InternetSetStatusCallback() колбак, который возвращает состояние канала и по нему определяешь, можно к серверу лезть или нет. Или. Нашёл функцию FtpFindNextFile (!!!) в стратьях! Причём нету её в описаниях функций в msdn и нету её в dll-инах.... Чё это за функция такая, не знаю... Но там же написано, что FtpFindFirstFile и FtpFindNextFile типа подобны виндовским FindFirstFile и FindNextFile... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2004, 16:24 |
|
||
|
wininet - InternetFindNextFile - ERROR_IO_PENDING
|
|||
|---|---|---|---|
|
#18+
2 CEMb спасибо за ответ - сегодня ночью наконец -то нашел - убрать в InternetOpen флаг INTERNET_FLAG_ASYNC - тогда все нормально работает иначе файл занят предыдущей операцией - спасибо, Bayburin Marat ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2004, 10:57 |
|
||
|
|

start [/forum/topic.php?fid=57&gotonew=1&tid=2035278]: |
0ms |
get settings: |
6ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
55ms |
get topic data: |
7ms |
get first new msg: |
4ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 192ms |
| total: | 320ms |

| 0 / 0 |
