AU3原码怎么实现与FTP服务器同步文件

AU3原码怎么实现与FTP服务器同步文件,第1张

首先去下载个 FTPEx.au3

给段源码你研究吧

#include <FTPEx.au3>

#include <Array.au3>

Local $path

$server = '192.168.1.1' 服务器

$name = 'admin' 用户名

$pass = 'admin' 密码

$Port = '21' 端口

$path = "c:\a1乡村\" 远程路径,FTP的路径。

$RemoteDir = $path 远程根路径转换,不用管它。

$LocalDir = "D:\存储软件\au3\进行中\FTP同步\实验室1\同步路径\" 本地路径,你想让文件下载到哪里?

$LocalDir = flocalDir($RemoteDir, $LocalDir)转换首目录,不用管

~ MsgBox(0, "$LocalDir", $LocalDir)

ftp($server, $name, $pass, $Port, $path, $RemoteDir)

Func ftp($server, $name, $pass, $Port, $path, $RemoteDir)

        说明:主要函数,搜索,下载

        $Open = _FTP_Open('MyFTP') 打开一个FTP会话

        $Conn = _FTP_Connect($Open, $server, $name, $pass, 0, $Port) 连接到ftp服务器

        _FTP_DirSetCurrent($Conn, $path)

        $aFile = _FTP_ListToArrayEx($Conn, 0, 0) 列目录(0=文件和目录,1=目录,2=文件)(格式0=mm/dd/yyyy,1=yyyy/mm/dd)

~         _ArrayDisplay($aFile)

~ MsgBox(0,"显示","共(" & $aFile[0][0] & ")个")

~ MsgBox(0,"$aFile[$i][0个]文件名",$aFile[0][0])

        For $i = 1 To $aFile[0][0]

                If $aFile[$i][2] = 16 And $aFile[$i][0] <> "." And $aFile[$i][0] <> ".." Then

~         $path=$path&$aFile[$i][0]&"\"

~                         MsgBox(0, "$path", $path & $aFile[$i][0] & "\", $RemoteDir)

                        ftp($server, $name, $pass, $Port, $path & $aFile[$i][0] & "\", $RemoteDir)

                EndIf

                If $aFile[$i][0] <> "." And $aFile[$i][0] <> ".." And $aFile[$i][2] <> 16 Then

                        检验

~                                 MsgBox(0,"",$aFile[$i][0])

                        $fname = $aFile[$i][0]文件名

                        $sync = ftpsync($LocalDir, $RemoteDir, $path, $fname)

~                         MsgBox(0,"是否存在文件返回信息",$sync)

~ If $fname = "PiView.mdb" Then

~                         MsgBox(0, "$sync", $sync[0]&@LF&$sync[1])

~ EndIf

                        Select

                                Case $sync[0] = 1未发现文件

                                        $ftp_download = _FTP_FileGet($Conn, $path & $fname, $sync[1], False) 下载文件(True=覆盖 False=不覆盖(默认))

~                                         MsgBox(0, $path & $fname, $sync[1])

                                Case $sync[0] = 2发现有同名文件

                                        $ftpsize = _FTP_FileGetSize($Conn, $path & $aFile[$i][0])

                                        $localsize = FileGetSize($sync)

~                                         MsgBox(0, "大小对比", $ftpsize & "-" & $localsize)

                                        If $ftpsize <> $localsize Then

~                                                 MsgBox(0, "大小对比不成功", $ftpsize & "-" & $localsize)

~                                                 MsgBox(0, "大小对比不成功", $path & $aFile[$i][0]& "-" & $sync)

                                                $ftp_download = _FTP_FileGet($Conn, $path & $fname, $sync[1], False)

~                                                 MsgBox(0,"$ftp_download",$ftp_download)

                                        EndIf

                                Case Else

                                        MsgBox(0, "意外错误", "搜索失败")

                        EndSelect

~         MsgBox(0,"次数",$aFile[$i][0])

                EndIf

~ MsgBox(0,"显示","名 = " & $aFile[$i][0] & @CRLF & $aFile[$i][1] & @CRLF & $aFile[$i][2] & @CRLF & $aFile[$i][3] & @CRLF & $aFile[$i][4] & @CRLF & $aFile[$i][5])

        Next

        $aFile[$i][0个]文件名

        $aFile[$i][1]文件大小

        $aFile[$i][2]文件属性

        $aFile[$i][3]文件修改日期-时间

        $aFile[$i][4]文件创作日期-时间

        $aFile[$i][5]文件通入日期-时间

        $Ftpc = _FTP_Close($Open) 关闭 _FTP_Open 打开的回话

EndFunc   ==>ftp

~ Func Download

~         用途:下载一个FTP上的文件

~ $ftp_download = _FTP_FileGet($Conn, "111\test222.txt", "e:\au3_ftp\test222.txt", False) 下载文件(True=覆盖 False=不覆盖(默认))

~ EndFunc   ==>ftp

Func ftpsync($LocalDir, $RemoteDir, $path, $fname)本地路径,远程根路径路径,变化中的远程路径,要下载的文件名。

        Local $loc12

        $loc12 = _ArrayCreate("0", "0")

~         说明:位置错误返回0,失败返回1,成功返回路径。主要用来判断是否有相同的文件。

        If FileExists($LocalDir) Then看看本地是否存在,要是不存在就创建一个。

        Else

                DirCreate($LocalDir)

        EndIf

        Local $len = StringLen($RemoteDir)

        Local $len1 = StringLen($path)

        $New = StringRight($path, $len1 - $len)

~         MsgBox(0, "$New", $New)

~         MsgBox(0, "$fname", $fname)

        If FileExists($LocalDir & $New) Then

        Else

                创建目录

                DirCreate($LocalDir & $New)

        EndIf

~         MsgBox(0,"需要判断是否存在的文件",$LocalDir & $New & $fname)

        If FileExists($LocalDir & $New & $fname) Then

                判断文件大小

                $loc12[0] = 2

                $loc12[1] = $LocalDir & $New & $fname

~                 Return $LocalDir & $New & $fname

~ MsgBox(0,"文件是否存在判定-是存在",$LocalDir & $New & $fname)

                

        Else

                创建目录下载文件

                

~                 Return 1

                $loc12[0] = 1

                $loc12[1] = $LocalDir & $New & $fname

        EndIf

        Return $loc12

EndFunc   ==>ftpsync

Func flocalDir($RemoteDir, $LocalDir)

~         说明:创建首目录

        $LOG = StringSplit($RemoteDir, "\")

        If $LOG[0] <= 1 Then如果呢~ 只有根目录盘那就是C盘根目录

                Local $result = StringLeft($RemoteDir, 1)

                $LocalDir = $LocalDir & $result & "盘根目录\"

                Return $LocalDir

        Else如果不是那远程目录的最后一个文件夹,便是根目录的最后一个文件夹了。

                $Loc1 = $LOG[$LOG[0] - 1]

                $LocalDir = $LocalDir & $Loc1 & "\"

                Return $LocalDir

                

        EndIf

EndFunc   ==>flocalDir

用软件实现比较容易吧?

我用的是Bestsync2011,就是觉得操作简单,容易上手,速度又快,稳定,不占用太多系统内存,又能不登陆作为windows服务同步,我用了很久了,还不错了。

比如:

1. 你本地装上软件以后,在主菜单里面 编辑-->追加任务

文件夹1选择 驱动盘中要备份的文件夹位置

文件夹2选择 选择FTP(填写FTP地址等相关参数)

同步方向为 文件夹2 --》文件夹1

在 FTP设定 下面填写服务器地址,账户名,密码等信息)

然后选择 完成 按钮

2. 在主界面下,双击你刚建立的任务,会弹出属性对话框

3. 选择“日程”属性页,勾选最后一个复选框“按指定日程启动任务”,然后在下面选择你想同步的具体时间点就Ok了~~嘿嘿


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/299677.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-26
下一篇2023-04-26

发表评论

登录后才能评论

评论列表(0条)

    保存