Что нового

Библиотека для работы с FTP

Статус
Закрыто для дальнейших ответов.

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
AutoIt: 3.3.0.0
Версия: 1.0

Категория: Сеть

Описание: Обеспечивает работу с FTP серверами. Да, похожая библиотека присутствует в последних версиях AutoIt Beta, но эта версия имеет ряд полезных отличий и дополнений. Во-первых данная UDF использует более "прозрачный" подход к написанию скриптов (похожа на GDI+). Во-вторых здесь присутствуют такие архиполезные функции, как _InternetGetOption() и _InternetSetOption(), без которых я вообще не представляю нормальной работы с FTP. Так же присутствуют не менее полезные и непонятно по каким причинам не включенные в "родную" FTP библиотеку функции: _FTP_ReadFile(), _FTP_WriteFile() и _IsInternet() (хотя _FTP_ReadFile() вроде уже присутствует). Описание (на английском) для всех функций и констант находится внутри библиотеки. Так же в отдельном файле - WinINetErrorMessages.au3 - собраны константы, которые могут понадобиться при работе с данной библиотекой.

Пример 1:
Код:
#Include <FTP.au3>

Global Const $Host = 'ftp.mozilla.org'
Global Const $Login = ''
Global Const $Password = ''

Global $hFtp, $hSession, $hFile, $tBuffer, $nSize, $nBytes

_FTP_Startup()

$hFtp = _FTP_Open('MyFtp')
$hSession = _FTP_Connect($hFtp, $Host, $Login, $Password)

$hFile = _FTP_OpenFile($hSession, 'README')
$nSize = _FTP_GetFileSize($hFile)
$tBuffer = DllStructCreate('byte[' & $nSize & ']')
_FTP_ReadFile($hFile, $tBuffer, $nSize)
_FTP_CloseFile($hFile)

$hFile = _WinAPI_CreateFile('README', 1)
_WinAPI_WriteFile($hFile, DllStructGetPtr($tBuffer), $nSize, $nBytes)
_WinAPI_CloseHandle($hFile)

_FTP_Disconnect($hSession)
_FTP_Close($hFtp)

_FTP_Shutdown()

Пример 2:
Код:
#Include <FTP.au3>

Global Const $Host = 'ftp.mozilla.org'
Global Const $Login = ''
Global Const $Password = ''

Global $hFtp, $hSession, $hFind, $tFind

_FTP_Startup()

$hFtp = _FTP_Open('MyFtp')
$hSession = _FTP_Connect($hFtp, $Host, $Login, $Password)

$tFind = DllStructCreate($tagWIN32_FIND_DATA)
$hFind = _FTP_FileFindFirst($hSession, '', $tFind)
While Not @error
	ConsoleWrite(DllStructGetData($tFind, 'FileName') & @CR)
	_FTP_FileFindNext($hFind, $tFind)
WEnd
_FTP_FileFindClose($hFind)

_FTP_Disconnect($hSession)
_FTP_Close($hFtp)

_FTP_Shutdown()

Источник: FTP UDF (оффициальный форум)
Автор: Yashied

[box title=Внимание]Работа над этим проектом остановлена, так как, начиная с версии AutoIt 3.3.1.0, библиотека для работы с FTP (FTPEx.au3) включена в его состав. Используйте встроенную библиотеку. Все вопросы, связанные с FTP в целом и с данной (FTP.au3) библиотекой в частности обсуждаем в разделе AutoIt для новичков.[/box]
 

Rjevsky

Новичок
Сообщения
102
Репутация
4
Такой вопрос к автору: Поддерживают ли _FTP_GetFile и _FTP_PutFile докачку? Если нет, то стоит ли ждать реализации?
 
Автор
Yashied

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Нет. Докачка реализуется самостоятельно.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Если я не ошибаюсь, то докачка должна поддерживаться на стороне сервера. если это так, то функции из этого UDF которые есть вызов функций из wininet.dll, стало быть, поддерживают докачку
 

Rjevsky

Новичок
Сообщения
102
Репутация
4
Yashied сказал(а):
Нет. Докачка реализуется самостоятельно.
а можно пример, как это реализовать на базе Вашей UDF? Сервер докачку поддерживает.
 

Z@}{@R

Новичок
Сообщения
2
Репутация
0
Помогите ламеру! Можете сделать код закачки на сервер! а то я что то и так и так извращался неполучается((((

А лучше чтобы целую папку выкладывал!))
 
Автор
Yashied

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Код:
#Include <FTP.au3>

Global Const $Host = ''
Global Const $Login = ''
Global Const $Password = ''

_FTP_Startup()
$hFtp = _FTP_Open('MyFtp')
$hSession = _FTP_Connect($hFtp, $Host, $Login, $Password)
_FTP_PutFile($hSession, 'readme.txt', 'readme.txt')
_FTP_Disconnect($hSession)
_FTP_Close($hFtp)
_FTP_Shutdown()
 

Van4o

Новичок
Сообщения
2
Репутация
0
почему то не работает ваша библиотека.
Выдает ошибку в 296 строке: Can not redeclare a constant.

может изза версии винды? у меня 2k
 
Автор
Yashied

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Работа с FTP реализована в AutoIt, начиная с версии 3.3.1.0, используй встроенные функции. Винда тут не при чем.
 

o_nix

Новичок
Сообщения
35
Репутация
1
Код:
#Include <FTPEx.au3>
#include <Array.au3>

$ftpopen = _FTP_Open('MyFTP Control')
$server = 'ftp.land.ru'
$user = 'gevorgglr124'
$pass = 'jpv18d'
$s_Remote = 'update'

$connect = _FTP_Connect($ftpopen, $server, $user, $pass, 1)
_FTP_DirSetCurrent($connect, $s_Remote)

$tttff = _FTP_DirPutContents($connect, "C:\ftp\upload", "/", 1);
_FTP_Close($ftpopen)


Должно рекурсивно аплоадить папку на ftp ...
Неработает ... почему ?? :wacko:
 
Автор
Yashied

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Попробуй убрать "/".

Код:
$tttff = _FTP_DirPutContents($connect, "C:\ftp\upload", "", 1)
 

Nikkor

Новичок
Сообщения
12
Репутация
0
Привет, спасибо за UDF. А возможно получить атрибуты файла, дата создания,дата изменения?
 
Автор
Yashied

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Nikkor сказал(а):
Привет, спасибо за UDF. А возможно получить атрибуты файла, дата создания,дата изменения?

См. второй пример. Структура $tFind, содержит всю эту информацию.
 

Nikkor

Новичок
Сообщения
12
Репутация
0
Пытаюсь выполнить код со второго примера, выскакивает ошибка,что я не так делаю.

Primer_2.au3 [строка 1] :

Код:
#Include <D:\AutoIt\may\FTP\FTP_Yashied\FTP.au3>

const $Host = ''
const $Login = ''
const $Password = ''
global const $FILE_ATTRIBUTE_ARCHIVE

local $hFtp, $hSession, $hFind, $tFind

_FTP_Startup()

$hFtp = _FTP_Open('MyFtp')
$hSession = _FTP_Connect($hFtp, $Host, $Login, $Password)

$tFind = DllStructCreate($tagWIN32_FIND_DATA)
$hFind = _FTP_FileFindFirst($hSession, '/ftproot/1c/BU/KorpSprav/Sovetsky_2004_12_09', $tFind)
while not @error
    ConsoleWrite(DllStructGetData($tFind, 'FileName') & @CR)
    _FTP_FileFindNext($hFind, $tFind)
wend
_FTP_FileFindClose($hFind)
    
_FTP_Disconnect($hSession)
_FTP_Close($hFtp)

_FTP_Shutdown()



Добавлено:
Сообщение автоматически объединено:

на константу не обращайте внимания, попала случайно.
 

Nikkor

Новичок
Сообщения
12
Репутация
0
Пробую на версии 3.3.4.0 AutoIt, таже ошибка. В чем причина, или кривые руки?
 

Nikkor

Новичок
Сообщения
12
Репутация
0
Yashied, ответь хоть что-нибудь. :IL_AutoIt_1:
 
Автор
Yashied

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Nikkor сказал(а):
Yashied, ответь хоть что-нибудь.

Начиная с версии 3.3.1.0, библиотека для работы с FTP включена в состав AutoIt. Поэтому, дабы избежать подобных ошибок, используй библиотеку, поставляемую с AutoIt - FTPEx.au3. Подробнее о ее функциях читай в оффициальной справке. В большинстве случаев, переход с FTP.au3 на FTPEx.au3 требует незначительных изменений в скриптах, в основном отличаются названия функций. Работу над FTP.au3 я остановил по понятным причинам, но если кто хочет, может самостоятельно внести необходимые изменения для совместимости с новыми версиями AutoIt, всего-навсего закомментировать несколько строк.

Второй пример для библиотеки FTPEx.au3 будет выглядеть следующим образом:

Код:
#Include <FTPEx.au3>

Global Const $Host = 'ftp.mozilla.org'
Global Const $Login = ''
Global Const $Password = ''

Global $hFtp, $hSession, $hFind, $aData

$hFtp = _FTP_Open('MyFtp')
$hSession = _FTP_Connect($hFtp, $Host, $Login, $Password)

$aData = _FTP_FindFileFirst($hSession, '', $hFind)
While Not @error
	ConsoleWrite($aData[10] & @CR)
	$aData = _FTP_FindFileNext($hFind)
WEnd
_FTP_FindFileClose($hFind)
_FTP_Close($hFtp)


Тема закрыта, все вопросы, связанные с FTP в целом и с данной (FTP.au3) библиотекой в частности обсуждаем в разделе AutoIt для новичков.
 
Статус
Закрыто для дальнейших ответов.
Верх