Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Не записывается файл функцией InternetWriteFile / 11 сообщений из 11, страница 1 из 1
01.07.2010, 16:21
    #36718201
Игорь С
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не записывается файл функцией InternetWriteFile
Уважаемые товарищи!
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
' Пытаюсь писать файл на сервер (пишу через HTTP-прокси)
Public Declare Function HttpSendRequestEx Lib "wininet.dll" Alias "HttpSendRequestExA" ( _
                ByVal hRequest As Long, ByRef lpBuffersIn As INTERNET_BUFFERS, _
                ByRef lpBuffersOut As INTERNET_BUFFERS, _
                ByVal dwFlags As Long, ByVal dwContext As Long) As Long
... 'Открываю запрос
hReq = HttpOpenRequest(hConnection, "POST", strURL, vbNullString, vbNullString, _
                                    0 &, INTERNET_FLAG_NO_CACHE_WRITE,  0 )
'    Отправляю запрос
iReq = HttpSendRequest(hReq, vbNullString,  0 , vbNullString,  0 )
'    Читаю файл в текстовую переменную
Open "c:\text.ext" For Binary Access Read As # 71 : fLen = LOF( 71 ): sFile = InputB(fLen, # 71 )
Close # 71 
'    Заполняю структуру (изъято из примера на С++)
    BufferIn.dwStructSize = Len(BufferIn)   '; // Must be set or error will occur
    BufferIn.Next =  0 & 'Null ';
    BufferIn.lpcszHeader =  0 & 'Null ';
    BufferIn.dwHeadersLength =  0  ';
    BufferIn.dwHeadersTotal =  0  ';
    BufferIn.lpvBuffer =  0 & 'Null ';
    BufferIn.dwBufferLength =  0  ';
    BufferIn.dwBufferTotal = fLen '; // This is the only member used other than dwStructSize
    BufferIn.dwOffsetLow =  0  ';
    BufferIn.dwOffsetHigh =  0  ';
 '   Отправляю расширение запроса
LRet = HttpSendRequestEx(hReq, BufferIn, BufferOut,  0 ,  0 ) 'Null, 0, 0)
'  Пишу файл пакетами по 2К 
i =  0 
Do
    i = i +  1 :   pos =  2048  * (i -  1 ) +  1 
    If fLen - pos >  2048  Then sBuffer = Mid(sFile, pos,  2048 ) Else sBuffer = Mid(sFile, pos)
    iRet = InternetWriteFile(hReq, sBuffer, Len(sBuffer), dwBytesWritten)
    If iRet =  0  Then
        ErrorOut Err.LastDllError, "InternetWriteFile"
        GoTo  89 
    End If
    If Not fLen - pos >  2048  Then Exit Do
Loop
... и получаю ошибку 12019 - The hendle is in the wrong state for the requested operation.
То же самое, если читаю файл пакетами в массив типа Байт (с соответствующей переделкой объявления функции):
Код: plaintext
1.
2.
3.
4.
Dim dBuffer As Long, pBuffer() As Byte
dBuffer =  2048 : ReDim pBuffer( 1  To dBuffer)
'...
    Get # 71 , , pBuffer
    iRet = InternetWriteFile(hReq, pBuffer( 1 ), dBuffer, dwBytesWritten)
Но, если в обращении
Код: plaintext
LRet = HttpSendRequestEx(hReq, BufferIn,  0 ,  0 ,  0 ) 
убрать приемный буфер ( с переделкой описания функции) , то первые 2К из файла записываются без ошибки, а на втором вызове InternetWriteFile сервер отвечает:
12030 - Тhe conntction with the server was tarmenated abnormally.
Может подскажите что-нибудь на свежую голову ... Заранее благодарен.
...
Рейтинг: 0 / 0
01.07.2010, 16:23
    #36718213
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не записывается файл функцией InternetWriteFile
объект ServerXMLHTTP попробуйте. а то вы всё с API что-то мудрите.
...
Рейтинг: 0 / 0
01.07.2010, 16:27
    #36718219
Игорь С
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не записывается файл функцией InternetWriteFile
Спасибо, но мне нужно это внедрить в модуль на VBA в среде Аксесса и не хочется добавлять дополнительные ресурсы, и так хлопот хватает ... Чтение файла освоено и через HTTP и напрямую по FTP (здесь и запись файла освоена). А вот попадаются HTTP-прокси и их нужно "добить".
...
Рейтинг: 0 / 0
01.07.2010, 16:30
    #36718226
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не записывается файл функцией InternetWriteFile
я не понимаю в чём у вас проблема? вам жалко ссылку на бибилиотеку добавить, если так, то юзайте через CreateObject() - ваше право, хоть и не понятно зачем
...
Рейтинг: 0 / 0
01.07.2010, 16:51
    #36718279
Игорь С
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не записывается файл функцией InternetWriteFile
Моя база написана под Аксесс и ведется в версиях от 97 до 2007. Хорошо, что еще файлы от Аксесса 2000 обрабатываются всеми последующими. Когда база под Аксессом работает на нескольких сотнях машин, а на всех машинах Аксессы разные (а "админы" то и дело меняют их: "У нас отформатировали диск и переустановили Видоус" ... вот ответик) и иногда бывает, что не хватает то той ссылки то другой, - стараюсь обойтись минимальными ресурсами, которые уже задействованы в базе... Вот такая причина.
...
Рейтинг: 0 / 0
01.07.2010, 16:55
    #36718292
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не записывается файл функцией InternetWriteFile
Игорь СМоя база написана под Аксесс и ведется в версиях от 97 до 2007. Хорошо, что еще файлы от Аксесса 2000 обрабатываются всеми последующими. Когда база под Аксессом работает на нескольких сотнях машин, а на всех машинах Аксессы разные (а "админы" то и дело меняют их: "У нас отформатировали диск и переустановили Видоус" ... вот ответик) и иногда бывает, что не хватает то той ссылки то другой, - стараюсь обойтись минимальными ресурсами, которые уже задействованы в базе... Вот такая причина.

и что? ServerXMLHTTP всегда есть, если боитесь , что не будет или не та версия, то можете обработать ошибку создания объекта. вообще не понимаю , что вы так боитесь юзать стандартные средства, но зато лезете в дебри API, которое как раз сильно иногда отличается в разных версиях ОС
...
Рейтинг: 0 / 0
01.07.2010, 18:23
    #36718533
Игорь С
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не записывается файл функцией InternetWriteFile
А ФТП он поддерживает?
...
Рейтинг: 0 / 0
02.07.2010, 11:21
    #36719453
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не записывается файл функцией InternetWriteFile
Игорь СА ФТП он поддерживает?

reliability
The HTTP client stack offers longer uptimes. WinInet features that are not critical for server applications, such as URL caching, auto-discovery of proxy servers, HTTP/1.1 chunking, offline support, and support for Gopher and FTP (File Transfer Protocol) protocols are not included in the new HTTP subset.
...
Рейтинг: 0 / 0
02.07.2010, 11:22
    #36719456
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не записывается файл функцией InternetWriteFile
Konst_OneИгорь СА ФТП он поддерживает?

reliability
The HTTP client stack offers longer uptimes. WinInet features that are not critical for server applications, such as URL caching, auto-discovery of proxy servers, HTTP/1.1 chunking, offline support, and support for Gopher and FTP (File Transfer Protocol) protocols are not included in the new HTTP subset.
...
Рейтинг: 0 / 0
02.07.2010, 12:15
    #36719629
Игорь С
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не записывается файл функцией InternetWriteFile
Спасибо!
С чего начать его изучение? Если можно укажите пару источников.
Т.е. я понял, что ФТП доступ осуществляю через WinInet, а HTTP - через этот "Server"?
...
Рейтинг: 0 / 0
02.07.2010, 12:22
    #36719649
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не записывается файл функцией InternetWriteFile
Игорь ССпасибо!
С чего начать его изучение? Если можно укажите пару источников.
Т.е. я понял, что ФТП доступ осуществляю через WinInet, а HTTP - через этот "Server"?


MSXML скачайте SDK, с ним хэлп идёт. или MSDN смотрите
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Не записывается файл функцией InternetWriteFile / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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