Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Помогите написать FTP-клиент.

1.2K
24 июля 2006 года
PAVEL BASIC
171 / / 24.07.2006
Помогите написать FTP-клиент с помощью контрола Inet. Любые предложения можно отослать по адресу. [email]mapstudio@mail.ru[/email]
Спасите!
13K
28 июля 2006 года
V.V.V.
59 / / 21.07.2006
А что это за контрол inet? У меня вот тоже проблемы с FTP. Раскажы о нем плииз.
1.2K
28 июля 2006 года
PAVEL BASIC
171 / / 24.07.2006
Да я сам то, не очень в курсе что это за контрол, и как с ним работать,
просто увидел его на панели компонентов. Но если у тебя проблемы с FTP, то ты можешь писать используя API-Функции. Поскольку проблему с FTP я решил вот код. [COLOR="DarkRed"]ТОЛЬКО КОЕ-ЧТО Тебе придётся переписать и дописать.[/COLOR] Код запиши в модуль

Public Const INTERNET_SERVICE_FTP = 1
Public Const INTERNET_SERVICE_GOPHER = 2
Public Const INTERNET_SERVICE_HTTP = 3

Public Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type

Public Type WIN32_FIND_DATA
dwFileAttributes As Long
ftCreationTime As FILETIME
ftLastAccessTime As FILETIME
ftLastWriteTime As FILETIME
nFileSizeHigh As Long
nFileSizeLow As Long
dwReserved0 As Long
dwReserved1 As Long
cFileName As String * 260
cAlternate As String * 14
End Type

Public hINetSession As Variant
Public hSession As Variant

Public Declare Function FtpGetFile _
Lib "wininet.dll" Alias "FtpGetFileA" ( _
ByVal hFtpSession As Long, _
ByVal lpszRemoteFile As String, _
ByVal lpszNewFile As String, _
ByVal fFailIfExists As Boolean, _
ByVal dwFlagsAndAttributes As Long, _
ByVal dwFlags As Long, _
ByVal dwContext As Long) As Boolean

Public Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" ( _
ByVal sAgent As String, _
ByVal nAccessType As Long, _
ByVal sProxyName As String, _
ByVal sProxyBypass As String, _
ByVal nFlags As Long) As Long

Public Declare Function InternetConnect Lib "wininet.dll" Alias "InternetConnectA" ( _
ByVal hInternetSession As Long, _
ByVal sServerName As String, _
ByVal nServerPort As Integer, _
ByVal sUserName As String, _
ByVal sPassword As String, _
ByVal nService As Long, _
ByVal dwFlags As Long, _
ByVal dwContext As Long) As Long


Public Declare Function InternetCloseHandle _
Lib "wininet.dll" (ByVal hInet As Long) As Integer

Public Declare Function FtpPutFile _
Lib "wininet.dll" Alias "FtpPutFileA" ( _
ByVal hFtpSession As Long, _
ByVal lpszLocalFile As String, _
ByVal lpszRemoteFile As String, _
ByVal dwFlags As Long, _
ByVal dwContext As Long) As Boolean

Public Declare Function FtpDeleteFile _
Lib "wininet.dll" Alias "FtpDeleteFileA" ( _
ByVal hFtpSession As Long, _
ByVal lpszFileName As String) As Boolean

Public Declare Function FtpRenameFile _
Lib "wininet.dll" Alias "FtpRenameFileA" ( _
ByVal hFtpSession As Long, _
ByVal lpszExisting As String, _
ByVal lpszNewName As String) As Boolean

Public Declare Function FtpFindFirstFile _
Lib "wininet.dll" Alias "FtpFindFirstFileA" ( _
ByVal hFtpSession As Long, _
ByVal lpszSearchFile As String, _
ByRef lpFindFileData As WIN32_FIND_DATA, _
ByVal dwFlags As Long, _
ByVal dwContent As Long) As Long

Public Declare Function InternetFindNextFile _
Lib "wininet.dll" Alias "InternetFindNextFileA" ( _
ByVal hFind As Long, ByRef lpvFindData As WIN32_FIND_DATA) As Long


Public Sub addMESSAGE(strMES As String)
Form1.MES.Text = Form1.MES.Text & strMES & Chr(13) & Chr(10)
End Sub

Public Sub ListFiles()
Dim hFile As Long 'This is a file handle
Dim fd As WIN32_FIND_DATA
hFile = FtpFindFirstFile(hSession, "*.*", fd, 0, 0)
If hFile = 0 Then
If Err.LastDllError = ERROR_NO_MORE_FILES Then
addMESSAGE ">> Все файлы найдены."
Exit Sub
Else
addMESSAGE ">> Произошёл сбой."
Exit Sub
End If
End If
Do
list1.additem fd.cFileName

Loop While InternetFindNextFile(hFile, fd) <> 0
'Close the file handle
Call InternetCloseHandle(hFile)
End Sub

Public Sub GUListFiles(dir As String)
Dim hFile As Long 'This is a file handle
Dim fd As WIN32_FIND_DATA
hFile = FtpFindFirstFile(hSession, dir & "*.*", fd, 0, 0)
If hFile = 0 Then
If Err.LastDllError = ERROR_NO_MORE_FILES Then
addMESSAGE ">> Все файлы найдены."
Exit Sub
Else
addMESSAGE ">> Произошёл сбой."
Exit Sub
End If
End If
Form1.List1.Clear
Do
list1.additem fd.cFileName

Loop While InternetFindNextFile(hFile, fd) <> 0
'Close the file handle
Call InternetCloseHandle(hFile)
End Sub

Public Sub adddir(dir As String)
Form1.Text1.Text = Form1.Text1 & dir & "/"
End Sub
13K
29 июля 2006 года
V.V.V.
59 / / 21.07.2006
Самый огромный Thank!!!

ЗЫ Никак не могу найти хоть какую нибудь инфу о WinInet в MSDN чтиве.
ЗЗЫ А у меня на панели компонентов нет никакого INETa:(
1.2K
29 июля 2006 года
PAVEL BASIC
171 / / 24.07.2006
:confused: Крайне странно, лично я использую тип проекта VB Pro Edition Control. Может ты запускал Standart EXE
21K
18 августа 2006 года
VirAlex
1 / / 18.08.2006
Я пишу фтп клиент на vb6 используя WinSock control.
Используя TCP соединение сначала реализовал ФТП протокол.
Все отлично работает только вот проблема. Иногда если качать конец файла (из 1гига последние 10Мегов, исползуя комманду REST startbyte) качается не до канца. Не 10мегов а 9.7Мега предположим. Дело в том что барсик не успевает сохранять инфу с такой скоростью с какой ее шлет сервак. Раньше при каждом приходе пакета производились грамозкие вычисления и потери были до нескольких мегабайт. Щаз пара десятков килобайт нехватает до канца файла. Как можно исправить? Куда девается инфа. Может можно замедлить передачу инфы? темиже АПИ функциями.

И еще формат листинга файлов приходящий по команде LIST от разных серверов почемуто разный. Есть ли денибуть инфа об этом.

Спасибо.
13K
18 августа 2006 года
V.V.V.
59 / / 21.07.2006
Хе-хе. Я вот тут тоже на эти грабли наступил (давно уже). У меня все свелось к вопросу Как узнать когда вся информация получена из сокета и организовать выход из цикла приема данных.
Ответ на него я еще не нашел :(.
А насчет листов, то существуют два их типа: Unix и Windows подобные (см. в IIS свойства FTP узла, вкладка "Домашний каталог")
15K
23 августа 2006 года
KAN
40 / / 08.08.2006
кстати, тоже все поисковики облазил, ища информацию про Inet1(не помню полное название, лень васик запускать), а нашёл код как у PAVEL BASICa.
1.8K
23 августа 2006 года
Валериус
190 / / 14.07.2006
[QUOTE=VirAlex]...Иногда если качать конец файла (из 1гига последние 10Мегов, исползуя комманду REST startbyte) качается не до канца. Не 10мегов а 9.7Мега предположим...[/QUOTE]
Вычисли сколько не хватает и ещё раз скомандуй REST startbyte. Поставь цикл While, пока не совпадёт то, сколько есть и сколько надо.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог