сравнить размер подойдет, если хоть что-то началось качаться, тут проблема, что из 10-ти файлов скачивается только 3 например.сравнить размер?
Код:_FTP_FileGetSize
$hFtp = _FTP_Open('MyFtp')
$hSession = _FTP_Connect($hFtp, $Host, $Login, $Password)
$aData = _FTP_FindFileFirst($hSession, '', $hFind)
ConsoleWrite('Количество файлов: ' & $aData[0] & @CR)
[AUTOIT] [/AUTOIT]
.https://autoit-script.ru/threads/poluchenie-dannyx-o-fajle-s-ftp-servera.1070/#post-7686
#Include <FTPEx.au3>
#Include <WinAPI.au3>
Global Const $Host = "192.168.88.1"
Global Const $Login = "ftpuser"
Global Const $Password = ""
Global Const $s_RemotePath = "disk1/files"
Global Const $localdir = "D:\ftp\"
Global $hFtp, $hSession, $hFind, $aData, $return, $file, $size
$hFtp = _FTP_Open('MyFtp')
$hSession = _FTP_Connect($hFtp, $Host, $Login, $Password)
Global $aData = _FTP_FindFileFirst($hSession, $s_RemotePath, $hFind)
_FTP_DirSetCurrent($hSession, $s_RemotePath)
While Not @error
Ftp($aData[9],$aData[10]) ;основная функция
WEnd
_FTP_FindFileClose($hFind)
_FTP_Close($hFtp)
Func Ftp($size,$file)
Select
Case FileExists($localdir&$file) = 0 ;если файла нет
fileget($file)
Case FileExists($localdir&$file) = 1 ;если файл есть
checkfile($size,$file)
Case Else ;на случай землетрясения
ConsoleWrite("чтото пошло не так"& @CR)
EndSelect
EndFunc
Func fileget($file) ;функция скачивания файла
_FTP_FileGet($hSession, $file, $localdir&$file, True)
Sleep(100)
EndFunc
Func checkfile($size,$file) ;проверка скачивания файла
ConsoleWrite("Размер файла на фтп " &$size & @CR)
$size2 = FileGetSize ($localdir&$file)
ConsoleWrite("Размер файла локально "&$size2 & @CR)
if $size = $size2 Then ;сравнение размеров
ConsoleWrite($file &@TAB&" скачан полностью" & @CR)
$aData = _FTP_FindFileNext($hFind);переключение на новый файл
If @error Then Exit ;если файлов больше нет выходим из цикла
Else
ConsoleWrite($file &@TAB&" ошибка скачивания файла" & @CR)
FileDelete($localdir&"\"&$file) ;удаляем недокачаный файл
Sleep(100)
ConsoleWrite("Пытаюсь снова скачать файл "&$file&" в "& $localdir&$file & @CR)
fileget($file)
EndIf
EndFunc
да это строка срабатывает когдаа вот эта строка полностью завершает код, можно её на что нибудь поменять?
_FTP_FindFileNext
не может получить имя следующего файла.Func checkfile($size,$file) ;проверка скачивания файла
ConsoleWrite("Размер файла на фтп " &$size & @CR)
$size2 = FileGetSize ($localdir&$file)
ConsoleWrite("Размер файла локально "&$size2 & @CR)
if $size = $size2 Then ;сравнение размеров
ConsoleWrite($file &@TAB&" скачан полностью" & @CR)
$aData = _FTP_FindFileNext($hFind);переключение на новый файл
If @error Then workinfile()
Else
ConsoleWrite($file &@TAB&" ошибка скачивания файла" & @CR)
FileDelete($localdir&"\"&$file) ;удаляем недокачаный файл
Sleep(100)
ConsoleWrite("Пытаюсь снова скачать файл "&$file&" в "& $localdir&$file & @CR)
fileget($file)
EndIf
EndFunc
Func workinfile()
ConsoleWrite("пишем новую функцию"& @CR)
EndFunc
_FTP_ListToArray
#Include <FTPEx.au3>
#Include <WinAPI.au3>
Global Const $Host = "192.168.88.1"
Global Const $Login = "ftpuser"
Global Const $Password = ""
Global Const $s_RemotePath = "disk1/files"
Global Const $localdir = "D:\ftp\"
Global $hFtp, $hSession, $hFind, $aData, $return = 0, $file, $sizeFTP, $sizeLocal
Func FTP_Close() ;закрытие сессии фтп
_FTP_FindFileClose($hFind)
_FTP_Close($hFtp)
EndFunc
Func Check_Local_Dir() ;проверка наличия каталога
Select
Case FileExists($localdir) = 0 ;каталога нет
ConsoleWrite("Каталога нет, создаю"& @CR)
DirCreate($localdir)
Case FileExists($localdir) = 1 ;каталог есть
ConsoleWrite("Каталог есть"& @CR)
Case Else ;на случай землетрясения
ConsoleWrite("ошибка проверки наличия локального каталога"& @CR)
EndSelect
EndFunc
Func FTP_Open() ;открытие сессии фтп
$hFtp = _FTP_Open('MyFtp')
$hSession = _FTP_Connect($hFtp, $Host, $Login, $Password)
_FTP_DirSetCurrent($hSession, $s_RemotePath)
Global $aData = _FTP_ListToArray($hSession, 2) ;список файлов пихаем в архив
If @error Then Exit ;нет файлов в каталоге
ConsoleWrite ($aData[0]& " файлов на фтп" & @CR)
For $a = 1 To $aData[0]
Local_File_Check($aData[$a])
Next
EndFunc
Func FTP_Copy_File($file,$sleep) ;Скачивание файла с фтп в локальный каталог
ConsoleWrite("Качаем файл на локальный пк"& @CR)
_FTP_FileGet($hSession, $file, $localdir&$file, True)
Sleep($sleep)
Local_File_Check($file)
EndFunc
Func Local_File_Check($file) ;Проверка наличия файла в локальном каталоге
ConsoleWrite("проверяем наличие файла "&$file& " в локальном каталоге"& @CR)
Select
Case FileExists($localdir&$file) = 0 ;если файла нет
ConsoleWrite("нет файла "&$file&" в локальном каталоге"& @CR)
FTP_Copy_File($file,1000)
Case FileExists($localdir&$file) = 1 ;если файл есть
ConsoleWrite("есть файл "&$file&" в локальном каталоге"& @CR)
FTP_and_local_size_file($file)
Case Else ;на случай землетрясения
ConsoleWrite("ошибка проверки наличия файлов в локальном каталоге"& @CR)
EndSelect
EndFunc
Func FTP_and_local_size_file($file) ;Сравниваем размер файлов в локальном каталоге и на фтп.
$sizeFTP = _FTP_FileGetSize($hSession, $file)
ConsoleWrite("Размер файла на фтп "&$sizeFTP& @CR)
$sizelocal = FileGetSize($localdir&$file)
ConsoleWrite("Размер файла в локальном каталоге "&$sizelocal& @CR)
If $sizeFTP = $sizelocal Then
ConsoleWrite("Файл "&$file&" имеет один размер, скачивание удалось"& @CR)
Else
ConsoleWrite("Файл "&$file&" имеет разный размер, скачивание не удалось"& @CR)
FileDelete($localdir&"\"&$file) ;удаляем недокачаный файл
Select
Case $return < 5 ;даем 5 секунд задержки
FTP_Copy_File($file,5000)
$return = $return + 1
Case $return < 10 ;даем 10 секунд задержки
FTP_Copy_File($file,10000)
$return = $return + 1
Case Else
ConsoleWrite("Файл не хочет докачиваться, возможно нужно увеличить время на скачивание."& @CR)
EndSelect
#cs
;~ FTP_Copy_File($file,10000) ;можно убрать Select - EndSelect и раскоментировать эту команду, тогда попытки скачать файл никогда не закончатся.
#ce
EndIf
EndFunc
Check_Local_Dir()
FTP_Open()
FTP_Close()
Newfunc()
Func Newfunc()
MsgBox(1, "MyFtp", "Все файлы скачаны, чо делаем дальше?")
EndFunc
ConsoleWrite ($aData[0]& " файлов на фтп" & @CR)
количество файлов в каталоге на фтп известно и даже печатается в консоль)сколько файлов на фтп