Что нового

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

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

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 703
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 703
Нет. Докачка реализуется самостоятельно.
 

kaster

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

Rjevsky

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

[email protected]}{@R

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

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

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 703
Код:
#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 703
Работа с 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 703
Попробуй убрать "/".

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

Nikkor

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

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 703
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()



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

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

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 165
Репутация
2 329

Nikkor

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

Nikkor

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

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 703
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 для новичков.
 
Статус
Закрыто для дальнейших ответов.
Верх