Что нового

Объясните пожалуйста куда и как вставить _FTP_SetStatusCallback() ?!

urrya

Новичок
Сообщения
159
Репутация
1
Доброго времени суток дамы и гос-да.
Написал код передачи файлов по FTP на сервер.
Но возникла проблема в целостности файлов. Короче говоря на сервер приходят "битые" файлы.
Нормальные клиенты FTP как то проверяют и контролируют
передаваемые файлы. Скорее всего функцией -
Код:
_FTP_SetStatusCallback()


но как эту функцию использовать я никак не могу понять :stars:

пример моего кода для отправки файлов -
Код:
#include <Array.au3>
#include <FTPEx.au3>

Global $put
Local $_DirGet, $chh = 0, $ich = 0, $bly = 0
Global $dir_name = _NowCalc()
$dir_name = StringTrimRight($dir_name, 9)
$dir_name = StringRegExpReplace($dir_name, "[/\;:]", '.', 0)
Local $fFoldLocal_dir_name = @ScriptDir & '\pic.rar'
Local $filerar = '/pic.rar'

Global $server = IniRead(@ScriptDir & "\ini.ini", 'FTP', 'FTP', 'faq')
Global $pass = IniRead(@ScriptDir & "\ini.ini", 'FTP', 'FTPPassword', 'faq')
Global $username = IniRead(@ScriptDir & "\ini.ini", 'FTP', 'FTPLogin', 'faq')
Local $fFoldServer = IniRead(@ScriptDir & "\ini.ini", 'FTP', 'fFolder', 'faq')
Local $fFoldServer_dir_name = '/' & $fFoldServer & '/' & $dir_name

Local $Open = _FTP_Open('ftp')
Local $Conn = _FTP_Connect($Open, $server, $username, $pass, 1)
_FTP_DirSetCurrent($Conn, '/' & $fFoldServer) ; вход в папку
Local $_Array = _FTP_ListToArray($Conn, 1, $INTERNET_FLAG_RELOAD)
;_ArrayDisplay($_Array)


If FileExists($fFoldLocal_dir_name) Then

Do
If $_Array[0] = 0 Then

    $_DirGet = _FTP_DirGetCurrent($Conn) ; Возвращает текущий каталог на FTP сервере.
If $_DirGet == '/' & $fFoldServer Then _FTP_DirCreate($Conn, $fFoldServer_dir_name) ; создаёт каталог

_FTP_DirSetCurrent($Conn, $dir_name) ; вход в папку
$put = _FTP_FilePut($Conn, $fFoldLocal_dir_name, $fFoldServer_dir_name & $filerar, $INTERNET_FLAG_TRANSFER_BINARY&$INTERNET_FLAG_RELOAD) ; загрузка файла на FTP Server


   Else

	   $chh = $_Array[0]
If $_Array[$chh] = $dir_name Then ; если последняя папка сегодняшней даты

_FTP_DirSetCurrent($Conn, $dir_name) ; вход в папку
$put = _FTP_FilePut($Conn, $fFoldLocal_dir_name, $fFoldServer_dir_name & $filerar, $INTERNET_FLAG_TRANSFER_BINARY&$INTERNET_FLAG_RELOAD) ; загрузка файла на FTP Server

  Else  ; иначе создаёт каталог

_FTP_DirCreate($Conn, $fFoldServer_dir_name) ; создаёт каталог
_FTP_DirSetCurrent($Conn, $dir_name) ; вход в папку
$put = _FTP_FilePut($Conn, $fFoldLocal_dir_name, $fFoldServer_dir_name & $filerar, $INTERNET_FLAG_TRANSFER_BINARY&$INTERNET_FLAG_RELOAD) ; загрузка файла на FTP Server


EndIf
EndIf

$_Arrayf = _FTP_ListToArray($Conn, 2, $INTERNET_FLAG_RELOAD)
If $_Arrayf <> 0 Then
Local $2Conn = _FTP_Close($Conn)
Local $2Open = _FTP_Close($Open)
$ich = 10
;FileDelete(@ScriptDir & '\pic.rar')
Else
$ich += 1
EndIf

Until $ich = 10

EndIf
ConsoleWrite('_FTP_Open  - ' & $Open & @CRLF)
ConsoleWrite('_FTP_Connect  - ' & $Conn & @CRLF)
ConsoleWrite('_FTP_FilePut  - ' & $put & @CRLF)
ConsoleWrite('_FTP_Connect  - ' & $2Conn & @CRLF)
ConsoleWrite('_FTP_FilePut  - ' & $2Open & @CRLF)
 

Yashied

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


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

И еще не понятно зачем столько переходов в папки на сервере. Разве нельзя закачивать файлы по путям?
 
Автор
urrya

urrya

Новичок
Сообщения
159
Репутация
1
Yashied
Спасибо за критику, действительно было много не нужного (ночь сказалась на коде :blink:smile:
Вот так -
Код:
#include <Array.au3>
#include <FTPEx.au3>

Global $put
Local $_DirGet, $chh = 0, $ich = 0, $bly = 0
Global $dir_name = _NowCalc()
$dir_name = StringTrimRight($dir_name, 9)
$dir_name = StringRegExpReplace($dir_name, "[/\;:]", '.', 0)
Local $fFoldLocal_dir_name = @ScriptDir & '\pic.rar'
Local $filerar = '/pic.rar'

Global $server = IniRead(@ScriptDir & "\ini.ini", 'FTP', 'FTP', 'faq')
Global $pass = IniRead(@ScriptDir & "\ini.ini", 'FTP', 'FTPPassword', 'faq')
Global $username = IniRead(@ScriptDir & "\ini.ini", 'FTP', 'FTPLogin', 'faq')
Local $fFoldServer = IniRead(@ScriptDir & "\ini.ini", 'FTP', 'fFolder', 'faq')
Local $fFoldServer_dir_name = '/' & $fFoldServer & '/' & $dir_name

Local $Open = _FTP_Open('ftp')
Local $Conn = _FTP_Connect($Open, $server, $username, $pass, 1)
_FTP_DirSetCurrent($Conn, '/' & $fFoldServer) ; вход в папку
Local $_Array = _FTP_ListToArray($Conn, 1, $INTERNET_FLAG_RELOAD)
;_ArrayDisplay($_Array)

If FileExists($fFoldLocal_dir_name) Then

Do
If $_Array[0] = 0 Then

    $_DirGet = _FTP_DirGetCurrent($Conn) ; Возвращает текущий каталог на FTP сервере.
If $_DirGet == '/' & $fFoldServer Then _FTP_DirCreate($Conn, $fFoldServer_dir_name) ; создаёт каталог

$put = _FTP_FilePut($Conn, $fFoldLocal_dir_name, $fFoldServer_dir_name & $filerar, $INTERNET_FLAG_TRANSFER_BINARY&$INTERNET_FLAG_RELOAD) ; загрузка файла на FTP Server

   Else

	   $chh = $_Array[0]
If $_Array[$chh] = $dir_name Then ; если последняя папка сегодняшней даты
$put = _FTP_FilePut($Conn, $fFoldLocal_dir_name, $fFoldServer_dir_name & $filerar, $INTERNET_FLAG_TRANSFER_BINARY&$INTERNET_FLAG_RELOAD) ; загрузка файла на FTP Server

  Else  ; иначе создаёт каталог

_FTP_DirCreate($Conn, $fFoldServer_dir_name) ; создаёт каталог
$put = _FTP_FilePut($Conn, $fFoldLocal_dir_name, $fFoldServer_dir_name & $filerar, $INTERNET_FLAG_TRANSFER_BINARY&$INTERNET_FLAG_RELOAD) ; загрузка файла на FTP Server

EndIf
EndIf

$_Arrayf = _FTP_ListToArray($Conn, 2, $INTERNET_FLAG_RELOAD)
If $_Arrayf <> 0 Then
Local $2Conn = _FTP_Close($Conn)
Local $2Open = _FTP_Close($Open)
$ich = 10
;FileDelete(@ScriptDir & '\pic.rar')
Else
$ich += 1
EndIf

Until $ich = 10

EndIf
ConsoleWrite('_FTP_Open  - ' & $Open & @CRLF)
ConsoleWrite('_FTP_Connect  - ' & $Conn & @CRLF)
ConsoleWrite('_FTP_FilePut  - ' & $put & @CRLF)
ConsoleWrite('_FTP_Connect  - ' & $2Conn & @CRLF)
ConsoleWrite('_FTP_FilePut  - ' & $2Open & @CRLF)


всё работает отлично :smile:

надо удалить тему, вопрос по теме то, не решён :-[
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
urrya сказал(а):
надо удалить тему, вопрос по теме то, не решён
Не нужно ничего удалять. _FTP_SetStatusCallback() вы вряд ли поймете на данном этапе (да и не поможет она вам), поэтому я и не стал на ней акцентировать внимание. Если же нужен прогресс закачки файлов, то для этого есть _FTP_ProgressUpload(). А еще нужно всегда помнить, что то или иное действие может быть недоступно из-за настройки самого FTP сервера.
 
Верх