Что нового

[Сеть, интернет] копирование а затем отправка файла по FTP

zeionline

Новичок
Сообщения
36
Репутация
1
Версия AutoIt: v3.3.6.1.
Описание:
Код:
#include <FTPEx.au3>
Global $iSizeMax = 1024, _ ;1 kb
        $sServer = "***", _ ;ftp host
        $sUsername = "***", _ ;Ftp user
        $sPass = "***", _ ;Ftp password
        $sFileLocal = @WindowsDir & '\results.txt', _;C:\results.txt
        $sFileFTP = 'kop_results.txt', _
        $iTimeOut = 60000, _ ; 1 min.
        $iStart = TimerInit()
While 1
    If TimerDiff($iStart) > $iTimeOut Then
        $iSize = FileGetSize($sFileLocal)
        If $iSize > $iSizeMax Then
            For $i = 1 To 1
                $hOpen = _FTP_Open('MyFTP Control')
                If @error Then ExitLoop
                $hConn = _FTP_Connect($hOpen, $sServer, $sUsername, $sPass, 1)
                If @error Then ExitLoop
                _FTP_FilePut($hConn, $sFileLocal, $sFileFTP)
                If @error Then ExitLoop
            Next
            If Not @error Then
                $iSizeMax += 1024
            EndIf
            _FTP_Close($hOpen)
        EndIf
        $iStart = TimerInit()
    EndIf
    Sleep(50)
WEnd

Добавте пожалуйста в этот скрипт функцию которая прежде чем отправить файл по FTP скопировала его, поскольку файл который нужно отправить редактируется из вне.

Примечания:
Вышеуказанный код отправляет файл на FTP каждые 60 секунд если его размер увеличился на 1кб. Спасибо.
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
Просто прокомментировал код.
Возможно и ошибся.
Код:
#include <FTPEx.au3>
Global $iSizeMax = 1024, _ ;объявляем переменную глобально и присваиваем ей значение 1 kb 
        $sServer = "***", _ ;объявляем переменную (адрес ftp сервера) ftp host
        $sUsername = "***", _ ;объявляем переменную - имя пользователя ftp сервера Ftp user
        $sPass = "***", _ ;объявляем переменую - пароль ползователя ftp сервера Ftp password
        $sFileLocal = @WindowsDir & '\results.txt', _;объявляем переменную полного пути к файлу C:\results.txt (хотя, - это C:\Windows) 
        $sFileFTP = 'kop_results.txt', _ ;объявляем переменную полного пути к копии файла C:\results.txt (хотя, - это директория скрипта)
        $iTimeOut = 60000, _ ;объявляем переменную и присваиваем значение 60000 1 min.
        $iStart = TimerInit(); присвоением переменной запускаем таймер
While 1 ;цикл
    If TimerDiff($iStart) > $iTimeOut Then ;если значение таймера на данный момент превысило из переменной $iStart 60000 (1 min - значение переменной $iTimeOut), Тогда
        $iSize = FileGetSize($sFileLocal) ;запишем в переменную $iSize реальный текущий размер файла results.txt
        If $iSize > $iSizeMax Then ;а если реальный полученнай размер файла превышает 1024 ($iSizeMax ), Тогда
            For $i = 1 To 1 ;один раз (For $i = 1 To 1  -  один раз) делаем следуюющее
                $hOpen = _FTP_Open('MyFTP Control') ;открываем файл (загрузка/передача с ftp)
                If @error Then ExitLoop ;если не получилось, Тогда выходим (полный выход из цикла)
                $hConn = _FTP_Connect($hOpen, $sServer, $sUsername, $sPass, 1) ;подключаемся к ftp 
                If @error Then ExitLoop ;если не получилось подключиться, Тогда (полный выход из цикла)
                _FTP_FilePut($hConn, $sFileLocal, $sFileFTP);отправляем наш файл на ftp
                If @error Then ExitLoop ;если не получилось, Тогда выходим (полный выход из цикла)
            Next
            If Not @error Then ;если получилось, тогда увеличиваем переменную на  1 kb
                $iSizeMax += 1024				
            EndIf
            _FTP_Close($hOpen);закрываем ранее открытый файл
        EndIf
        $iStart = TimerInit();запускаем таймер
    EndIf
    Sleep(50)
WEnd
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
Код:
#include <FTPEx.au3>
Global $iSizeMax = 1024, _ ;объявляем переменную глобально и присваиваем ей значение 1 kb 
        $sServer = "***", _ ;объявляем переменную (адрес ftp сервера) ftp host
        $sUsername = "***", _ ;объявляем переменную - имя пользователя ftp сервера Ftp user
        $sPass = "***", _ ;объявляем переменую - пароль ползователя ftp сервера Ftp password
        $sFileLocal = @WindowsDir & '\results.txt', _;объявляем переменную полного пути к файлу C:\results.txt (хотя, - это C:\Windows) 
        $sFileFTP = 'kop_results.txt', _ ;объявляем переменную полного пути к копии файла C:\results.txt (хотя, - это директория скрипта)
        $iTimeOut = 60000, _ ;объявляем переменную и присваиваем значение 60000 1 min.
        $iStart = TimerInit(); присвоением переменной запускаем таймер
While 1 ;цикл
    If TimerDiff($iStart) > $iTimeOut Then ;если значение таймера на данный момент превысило из переменной $iStart 60000 (1 min - значение переменной $iTimeOut), Тогда
        $iSize = FileGetSize($sFileLocal) ;запишем в переменную $iSize реальный текущий размер файла results.txt
        If $iSize > $iSizeMax Then ;а если реальный полученнай размер файла превышает 1024 ($iSizeMax ), Тогда
            For $i = 1 To 1 ;один раз (For $i = 1 To 1  -  один раз) делаем следуюющее
                $hOpen = _FTP_Open('MyFTP Control') ;открываем сессию ftp 
                If @error Then ExitLoop ;если не получилось, Тогда выходим (выход из цикла)
                $hConn = _FTP_Connect($hOpen, $sServer, $sUsername, $sPass, 1) ;подключаемся к ftp 
                If @error Then ExitLoop ;если не получилось подключиться, Тогда (выход из цикла), Иначе
				; надо отправить наш файл на ftp, но прежжде мы его отправим, сначала скопируем его , а уж потом отправим
				FileCopy($sFileLocal, $sFileFTP, 1) ;копируем его (перезаписывая)
                _FTP_FilePut($hConn, $sFileLocal, $sFileFTP);отправляем наш файл на ftp (тут я очень сомневаюсь в првильности всей этой стороки)
                If @error Then ExitLoop ;если не получилось, Тогда выходим (выход из цикла)
            Next
            If Not @error Then ;если получилось, тогда увеличиваем переменную $iSizeMax на  1 kb
                $iSizeMax += 1024               
            EndIf
            _FTP_Close($hOpen);закрываем ранее открытую сессию ftp
        EndIf
        $iStart = TimerInit();запускаем таймер
    EndIf
    Sleep(100) ;задаржка 100
WEnd


$sFileLocal = @WindowsDir & '\results.txt ;это C:\Windows\results.txt
$sFileFTP = 'kop_results.txt' ;это директория скрипта
 
Автор
Z

zeionline

Новичок
Сообщения
36
Репутация
1
Код:
#include <FTPEx.au3>
Global $iSizeMax = 1024, _ ;объявляем переменную глобально и присваиваем ей значение 1 kb
        $sServer = "***", _ ;объявляем переменную (адрес ftp сервера) ftp host
        $sUsername = "***", _ ;объявляем переменную - имя пользователя ftp сервера Ftp user
        $sPass = "***", _ ;объявляем переменую - пароль ползователя ftp сервера Ftp password
        $sFileLocal = @WindowsDir & '\results.txt', _;объявляем переменную полного пути к файлу C:\results.txt (хотя, - это C:\Windows)
        $sFileFTP = 'kop_results.txt', _ ;объявляем переменную полного пути к копии файла C:\results.txt (хотя, - это директория скрипта)
        $iTimeOut = 60000, _ ;объявляем переменную и присваиваем значение 60000 1 min.
        $iStart = TimerInit(); присвоением переменной запускаем таймер
While 1 ;цикл
    If TimerDiff($iStart) > $iTimeOut Then ;если значение таймера на данный момент превысило из переменной $iStart 60000 (1 min - значение переменной $iTimeOut), Тогда
        $iSize = FileGetSize($sFileLocal) ;запишем в переменную $iSize реальный текущий размер файла results.txt
        If $iSize > $iSizeMax Then ;а если реальный полученнай размер файла превышает 1024 ($iSizeMax ), Тогда
            For $i = 1 To 1 ;один раз (For $i = 1 To 1  -  один раз) делаем следуюющее
                $hOpen = _FTP_Open('MyFTP Control') ;открываем сессию ftp
                If @error Then ExitLoop ;если не получилось, Тогда выходим (выход из цикла)
                $hConn = _FTP_Connect($hOpen, $sServer, $sUsername, $sPass, 1) ;подключаемся к ftp
                If @error Then ExitLoop ;если не получилось подключиться, Тогда (выход из цикла), Иначе
                ; надо отправить наш файл на ftp, но прежжде мы его отправим, сначала скопируем его , а уж потом отправим
                FileCopy($sFileLocal, $sFileFTP, 1) ;копируем его (перезаписывая)
                _FTP_FilePut($hConn, $sFileFTP, $sFileFTP);отправляем наш файл на ftp (тут я очень сомневаюсь в првильности всей этой стороки)
                If @error Then ExitLoop ;если не получилось, Тогда выходим (выход из цикла)
            Next
            If Not @error Then ;если получилось, тогда увеличиваем переменную $iSizeMax на  1 kb
                $iSizeMax += 1024              
            EndIf
            _FTP_Close($hOpen);закрываем ранее открытую сессию ftp
        EndIf
        $iStart = TimerInit();запускаем таймер
    EndIf
    Sleep(100) ;задаржка 100
WEnd


_FTP_FilePut($hConn, $sFileFTP, $sFileFTP) - вот так вот правильно. Спасибо за помощь.
 
Верх