ac5474012 发表于 2011-8-3 15:11:02

[已解决]遍历搜索FTP文件,出现问题。

本帖最后由 ac5474012 于 2011-8-4 10:26 编辑

答我找到原因了,不说了,看代码吧。
将这两句        $path=$path&$aFile[$i]&"\"
        ftp($server,$name,$pass,$port,$path)换成ftp($server,$name,$pass,$port,$path&$aFile[$i]&"\")#Region AutoIt3Wrapper 预编译参数(常用参数)
#AutoIt3Wrapper_Icon=                                                                                 ;图标,支持EXE,DLL,ICO
#AutoIt3Wrapper_OutFile=                                                                        ;输出文件名
#AutoIt3Wrapper_OutFile_Type=exe                                                        ;文件类型
#AutoIt3Wrapper_Compression=4                                                                ;压缩等级
#AutoIt3Wrapper_UseUpx=y                                                                         ;使用压缩
#AutoIt3Wrapper_Res_Comment=                                                                 ;注释
#AutoIt3Wrapper_Res_Description=                                                        ;详细信息
#AutoIt3Wrapper_Res_Fileversion=                                                        ;文件版本
#AutoIt3Wrapper_Res_FileVersion_AutoIncrement=p                                ;自动更新版本
#AutoIt3Wrapper_Res_LegalCopyright=                                                 ;版权
#AutoIt3Wrapper_Change2CUI=N                                                   ;修改输出的程序为CUI(控制台程序)
;#AutoIt3Wrapper_Res_Field=AutoIt Version|%AutoItVer%                ;自定义资源段
;#AutoIt3Wrapper_Run_Tidy=                                                   ;脚本整理
;#AutoIt3Wrapper_Run_Obfuscator=                                                      ;代码迷惑
;#AutoIt3Wrapper_Run_AU3Check=                                                                 ;语法检查
;#AutoIt3Wrapper_Run_Before=                                                                 ;运行前
;#AutoIt3Wrapper_Run_After=                                                                        ;运行后
#EndRegion AutoIt3Wrapper 预编译参数设置完成
#cs ____________________________________

Au3 版本: 3.3.7.2
脚本作者: guoji
        Email:
        QQ/TM:
脚本版本:
脚本功能: 用FTP协议同步服务器的信息

#ce _______________脚本开始_________________







#include <FTPEx.au3>
#include <Array.au3>
Local $path
$server = '192.168.7.100';服务器
$name = 'sync'            ;用户名
$pass = 'adminootc'            ;密码
$Port = '2121'         ;端口
$path = "c:\a1\"          ;路径

ftp($server,$name,$pass,$port,$path)

Func ftp($server,$name,$pass,$port,$path)
       
$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 & ")个")
;~ MsgBox(0,"$aFile[$i]文件名",$aFile)
for $i = 1 to $aFile
        If $aFile[$i] = 16 And $aFile[$i]<>"." And $aFile[$i]<>".." Then
;~         $path=$path&$aFile[$i]&"\"
        MsgBox(0,"$path",$path&$aFile[$i]&"\")
        ftp($server,$name,$pass,$port,$path&$aFile[$i]&"\")
EndIf

;~ MsgBox(0,"显示","名 = " & $aFile[$i] & @CRLF & $aFile[$i] & @CRLF & $aFile[$i] & @CRLF & $aFile[$i] & @CRLF & $aFile[$i] & @CRLF & $aFile[$i])

next
;$aFile[$i]文件名
;$aFile[$i]文件大小
;$aFile[$i]文件属性
;$aFile[$i]文件修改日期-时间
;$aFile[$i]文件创作日期-时间
;$aFile[$i]文件通入日期-时间
$Ftpc = _FTP_Close($Open);关闭 _FTP_Open 打开的回话
EndFunc问我看了 遍历搜索文件
所以想做一个FTP的遍历搜索文件的脚本,也可以是同步文件,我最终是要做同步文件的。但是我做到一半发现有问题。

问题:
1.在调用自己后,$path 变量的数值被保留下来了,关键的问题是如果不让$path被保留。

请帮我看看

#include <FTPEx.au3>
#include <Array.au3>

$server = '192.168.1.100';服务器
$name = ''            ;用户名
$pass = ''            ;密码
$Port = '21'         ;端口
$path = "c:\a1\"          ;路径
ftp($server,$name,$pass,$port,$path)

Func ftp($server,$name,$pass,$port,$path)
       
$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 & ")个")
;~ MsgBox(0,"$aFile[$i]文件名",$aFile)
for $i = 1 to $aFile
        If $aFile[$i] = 16 And $aFile[$i]<>"." And $aFile[$i]<>".." Then
        $path=$path&$aFile[$i]&"\"
        ftp($server,$name,$pass,$port,$path)
MsgBox(0,"$path",$path)
EndIf

;~ MsgBox(0,"显示","名 = " & $aFile[$i] & @CRLF & $aFile[$i] & @CRLF & $aFile[$i] & @CRLF & $aFile[$i] & @CRLF & $aFile[$i] & @CRLF & $aFile[$i])

next
;$aFile[$i]文件名
;$aFile[$i]文件大小
;$aFile[$i]文件属性
;$aFile[$i]文件修改日期-时间
;$aFile[$i]文件创作日期-时间
;$aFile[$i]文件通入日期-时间
$Ftpc = _FTP_Close($Open);关闭 _FTP_Open 打开的回话
EndFunc

z761003 发表于 2011-11-14 17:14:35

有点意思,有点难度哦

无风的日子 发表于 2011-11-24 17:34:59

这个文件多的话会不会很卡?

auto 发表于 2012-2-4 09:24:15

回复 1# ac5474012


    你这个遍历的问题解决了吗?我测试了一下,好像还是没有解决
不报错,但还是不能进入下级目录或返回上一级

805333 发表于 2012-2-7 22:52:08

还是有问题,下层目录有问题

pengmo 发表于 2012-3-23 14:04:07

速度慢的原因是,每次重新遍历目录都调用了_FTP_Connect 函数。
#include <FTPEx.au3>

$server = '10.1.1.12' ;服务器
$name = '' ;用户名
$pass = '' ;密码
$Port = '' ;端口
$path = "" ;路径

$Open = _FTP_Open('MyFTP') ;打开一个FTP会话
$Conn = _FTP_Connect($Open, $server, $name, $pass, 0, $Port) ;连接到ftp服务器
FTP_GetAllFile("")

Func FTP_GetAllFile($path)
        ConsoleWrite($path & @CR)
        _FTP_DirSetCurrent($Conn, $path)
       
        $aFile = _FTP_ListToArrayEx($Conn, 0, 0) ;列目录(0=文件和目录,1=目录,2=文件)(格式0=mm/dd/yyyy,1=yyyy/mm/dd)
        If ($aFile == 0) Then Return

        For $i = 1 To $aFile
                $fileName = $aFile[$i]
                $fileAttrib = $aFile[$i]
               
                If ($fileAttrib == 16) then
                        If ($path == "") Then $path = '/' & $path
                        FTP_GetAllFile($path & $fileName & '/')
                Else
                        ConsoleWrite($server & $path & $fileName & @CR)
                EndIf
        Next
EndFunc

_FTP_Close($Open) ;关闭 _FTP_Open 打开的回话
页: [1]
查看完整版本: [已解决]遍历搜索FTP文件,出现问题。