找回密码
 加入
搜索
查看: 4903|回复: 5

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

  [复制链接]
发表于 2011-8-3 15:11:02 | 显示全部楼层 |阅读模式
本帖最后由 ac5474012 于 2011-8-4 10:26 编辑

我找到原因了,不说了,看代码吧。
将这两句
        $path=$path&$aFile[$i][0]&""
        ftp($server,$name,$pass,$port,$path)
换成
ftp($server,$name,$pass,$port,$path&$aFile[$i][0]&"")
#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[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]&"")
        ftp($server,$name,$pass,$port,$path&$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的遍历搜索文件的脚本,也可以是同步文件,我最终是要做同步文件的。但是我做到一半发现有问题。

问题:
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[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]&""
        ftp($server,$name,$pass,$port,$path)
MsgBox(0,"$path",$path)
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
发表于 2011-11-14 17:14:35 | 显示全部楼层
有点意思,有点难度哦
发表于 2011-11-24 17:34:59 | 显示全部楼层
这个文件多的话会不会很卡?
发表于 2012-2-4 09:24:15 | 显示全部楼层
回复 1# ac5474012


    你这个遍历的问题解决了吗?我测试了一下,好像还是没有解决
不报错,但还是不能进入下级目录或返回上一级
发表于 2012-2-7 22:52:08 | 显示全部楼层
还是有问题,下层目录有问题
发表于 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[0][0]
                $fileName = $aFile[$i][0]
                $fileAttrib = $aFile[$i][2]
               
                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 打开的回话
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-2 09:15 , Processed in 0.082555 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表