Что нового

[Сеть, интернет] Закачка последнего изменившегося файла с ФТП.

irshat

Новичок
Сообщения
7
Репутация
0
Поиск на фтп во вложенных папках свежего файла и сохранение его на локальный диск.
Не работает, нужна помощь.

Код:
#include <FTPEx.au3>
$server = 'ftp.demo.ru'
$username = 'demo'
$pass = '123'
$Dir = '/proga/new/'
$Open = _FTP_Open('ZIC')

$sFolder = 'ftp://ftp.demo.ru/proga/new/'
$sCopyPath = 'c:\demo'

$LastModifiedFile = Search($sFolder & "\")
FileCopy($LastModifiedFile, $sCopyPath, 1)
$TargetFolder = StringLeft($LastModifiedFile, StringInStr($LastModifiedFile, "\", 0, -1))
ShellExecute($TargetFolder)
Exit


Func search($source_folder)
    Static $max = "0"
    Static $file = ""

    $search = FileFindFirstFile($source_folder & "demo.exe")

    While 1
        $source_file = FileFindNextFile($search)
        if @error then ExitLoop
        if @extended Then ;- каталог. Просматриваем содержимое...
            search($source_folder & $source_file & "\")
            ContinueLoop
        EndIf

        $FileModifiedTime = FileGetTime($source_folder & $source_file, 0, 1)
        if  StringCompare($FileModifiedTime, $max,2) > 0 Then
            $max = $FileModifiedTime
            $file = $source_folder & $source_file
        EndIf
    WEnd
    Return $file
EndFunc
 
Автор
I

irshat

Новичок
Сообщения
7
Репутация
0
Что-то тишина, или слишком сложно, или легко, что спецам не интересно даже разбирать эту задачу.
Я тут по форуму просмотрел, справку :thumbs_down: почитал, там-здесь погуглил, и что-то более-менее начал вырисовывать, но есть вопросы может кто подскажет?
Код:
$sFile1 = "c:\demo\demo.exe"

$sFileTime1 = FileGetTime($sFile1, 0, 1)

If Not StringIsDigit($sFileTime1) Or StringLen($sFileTime1) <> 14 Then Exit 13
$sTime = StringRegExpReplace($sFileTime1, '^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})$', '$3/$2/$1 $4:$5:$6')
ConsoleWrite($sTime & @LF)



#Include <FTPEx.au3>
#Include <WinAPI.au3>

Global Const $Host = 'ftp.demo.ru'
Global Const $Login = 'login'
Global Const $Password = 'pass'

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

$hFtp = _FTP_Open('MyFtp')
$hSession = _FTP_Connect($hFtp, $Host, $Login, $Password)
$aData = _FTP_FindFileFirst($hSession, '/demo/', $hFind)
While Not @error
    ConsoleWrite('Файл: ' & $aData[10] & @CR)
    ConsoleWrite('Дата изменения: ' & _FTP_FileTimeLoHiToStr($aData[6], $aData[7]) & @CR)
	$sTime2 = _FTP_FileTimeLoHiToStr($aData[6], $aData[7])
	If $sTime < $sTime2 Then
    InetGet("ftp://login:[email protected]/demo/"& $sTime2 &"/demo.exe", "c:\demo\demo.exe", 0, 8)
 Else
	$aData = _FTP_FindFileNext($h_Handle)
WEnd
_FTP_FindFileClose($hFind)
_FTP_Close($hFtp)

1. Почему название фтп не ставится произвольно, хотя в справке написано, что произвольно
в этом месте
Код:
$hFtp = _FTP_Open('MyFtp')

2. Как можно поставить переменную в пути сохранения, я поставил так, не идет
Код:
f $sTime < $sTime2 Then
    InetGet("ftp://login:[email protected]/demo/"& $sTime2 &"/demo.exe", "c:\demo\demo.exe", 0, 8)

3. Как можно организовать цикл, у меня выдает ошибку
Код:
While Not @error
    ConsoleWrite('Файл: ' & $aData[10] & @CR)
    ConsoleWrite('Дата изменения: ' & _FTP_FileTimeLoHiToStr($aData[6], $aData[7]) & @CR)
	$sTime2 = _FTP_FileTimeLoHiToStr($aData[6], $aData[7])
	If $sTime < $sTime2 Then
    InetGet("ftp://login:[email protected]/demo/"& $sTime2 &"/demo.exe", "c:\demo\demo.exe", 0, 8)
 Else
	$aData = _FTP_FindFileNext($h_Handle)
WEnd
_FTP_FindFileClose($hFind)
_FTP_Close($hFtp)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Предупреждение За нарушение правил форума (пункт В.11):
Любые отрывки AutoIt кода необходимо заключать в тег [autoit]
autoit.gif
(подробнее), а обычный код соответственно в тег [code]
code.gif
(подробнее). Также большие выдержки текста помещайте под тег [spoiler]
spoiler.gif
(подробнее), там где это поддерживается естественно. Как в случае с названием темы, также короткое и эргономичное сообщение привлекает больше внимания, и шансы на получение конкретного ответа увеличиваются.


С уважением, ваш Модератор.
 
Верх