#include <FTPEx.au3>
#include <Date.au3>
#include <Array.au3>
Local $sPassive = "0"
Local $sPort = "21"
Local $sServer = "ftp.csx.cam.ac.uk"
Local $sUserName = ""
Local $sPassword = ""
Local $delta = "2" ; кол-во дней, старше которых удаляем.
Local $sDir = "/pub/software/";Здесь путь к папке, где искать файлы
Local $hOpen = _FTP_Open('MyFTP Control')
If @error Then
MsgBox(16, "Супер FTP клиент", "Не удалось создать сессию! Код ошибки: " & @error & "")
Exit
EndIf
Local $hConn = _FTP_Connect($hOpen, $sServer, $sUserName, $sPassword, $sPassive, $sPort)
If @error Then
MsgBox(16, "Супер FTP клиент", "Не удалось подключиться к серверу! Код ошибки: " & @error & "")
Local $Ftpc = _FTP_Close($hOpen)
Exit
EndIf
_FTP_DirSetCurrent($hConn, $sDir)
If @error Then
MsgBox(16, "Супер FTP клиент", "Не удалось установить" & _
"текущий каталог на FTP сервере." & @CRLF & "в каталоге " & $sDir & @CRLF & " Код ошибки: " & @error & "")
Local $Ftpc = _FTP_Close($hOpen)
Exit
EndIf
Local $aFolder = _FTP_ListToArray($hConn, 1);Получение названия всех папок по пути $sDir
_ArrayDisplay($aFolder, "Каталоги в " & $sDir)
For $i = 1 To $aFolder[0];Перебор всех папок
_FTP_DirSetCurrent($hConn, $sDir & $aFolder[$i]);Устанавка текущего каталога
If @error Then
MsgBox(16, "Супер FTP клиент", "Не удалось установить" & "текущий каталог на FTP сервере." & @CRLF & "в каталоге " & $sDir & $aFolder[$i] & @CRLF & " Код ошибки: " & @error & "")
Local $Ftpc = _FTP_Close($hOpen)
Exit
EndIf
Local $aFile = _FTP_ListToArrayEx($hConn, 2);Получение данных по файлам в текущей папке
_ArrayDisplay($aFile,'Файлы в '&$sDir & $aFolder[$i])
If IsArray($aFile) Then
For $y = 1 To $aFile[0][0]
$FileData = StringSplit($aFile[$y][3], ' ')
$Data = StringSplit($FileData[1], '/')
$NewFileData = $Data[1] & '/' & $Data[3] & '/' & $Data[2] & ' ' & $FileData[2];Замена местами дня с месяцем изменения файла
If _DateDiff('D', $NewFileData, _NowCalc()) > $delta And Not _LastDay($Data,$y,$aFile) And Not _FirstDay($Data,$y,$aFile) Then;Удаление файла,еси дата изменения > $delta
_FTP_FileDelete($hConn, $sDir & $aFolder[$i] & '/' & $aFile[$y][0]) ;и день не последний и не первый в месяце
If @error Then
MsgBox(16, "Супер FTP клиент", "Ошибка удаления файла " & @CRLF & $sDir & $aFolder[$i] & '/' & $aFile[$y][0] & "" & @CRLF & "Код ошибки: " & @error & "")
EndIf
EndIf
Next;Сдедующий файл в текущей папке
EndIf
Next;Следующая папка в $sDir
Local $Ftpc = _FTP_Close($hOpen)
Func _LastDay($Data,$Poz,$FileArray)
$FileYear=$Data[1]
$FileMonth=$Data[3]
$FileDay=$Data[2]
$MaxDay = _DateDaysInMonth($Data[1], $Data[3])
If $MaxDay = $Data[2] Then
Return True
Else
For $j=0 to UBound($FileArray)-1
If $j<>$Poz Then
$NextFileData = StringSplit($FileArray[$j][3], ' ')
$NextData = StringSplit($FileData[1], '/')
$NextFileYear=$NextData[1]
$NextFileMonth=$NextData[3]
$NextFileDay=$NextData[2]
if $NextFileYear=$FileYear and $NextFileMonth=$FileMonth and $NextFileDay>$FileDay Then Return False
EndIf
Next
Return True
EndIf
EndFunc ;==>_LastDay
Func _FirstDay($Data,$Poz,$FileArray)
$FileYear=$Data[1]
$FileMonth=$Data[3]
$FileDay=$Data[2]
If $FileDay = 1 Then
Return True
Else
For $j=0 to UBound($FileArray)-1
If $j<>$Poz Then
$NextFileData = StringSplit($FileArray[$j][3], ' ')
$NextData = StringSplit($FileData[1], '/')
$NextFileYear=$NextData[1]
$NextFileMonth=$NextData[3]
$NextFileDay=$NextData[2]
if $NextFileYear=$FileYear and $NextFileMonth=$FileMonth and $NextFileDay<$FileDay Then Return False
EndIf
Next
Return True
EndIf
EndFunc ;==>_FirstDay