回复 6# jsdn2000
使用递归的方法列出文件目录
Func _FTP_DelTree($Conn, $Dir);这个函数给你参考一下
Local $aList[1][1]
_FtpFilelistEx($aList, $Conn, $Dir)
_WaitMessage('正在删除旧的备份目录: ' & $Dir)
GUICtrlSetState($label4, $GUI_SHOW)
GUICtrlSetState($progressbar2, $GUI_SHOW)
For $I = UBound($aList) - 1 To 1 Step -1
_WaitMessage('正在删除 "' & $aList[$I][6] & '/' & $aList[$I][0] & '"', False, False, '总进度:' & ($aList[0][0] + 1 - $I) & '/' & $aList[0][0] & @CRLF & Chr(32) & Round(($aList[0][0] + 1 - $I) * 100 / $aList[0][0], 2) & '%')
GUICtrlSetData($progressbar2, (($aList[0][0] + 1 - $I) * 100 / $aList[0][0]))
Switch $aList[$I][2]
Case '16'
If Not _FTP_DirDelete($Conn, $aList[$I][6] & '/' & $aList[$I][0]) Then
_WaitMessage('删除FTP上的目录: "' & $aList[$I][6] & '/' & $aList[$I][0] & '"失败')
_Log('删除FTP上的目录: "' & $aList[$I][6] & '/' & $aList[$I][0] & '"失败,(可能原因①目录非空,存在隐藏文件,而域管理员设置了不显示隐藏文件,无法列出完整FTP文件列表.②目录设定了不能删除的保护性操作.③有其它用户正在操作此FTP.④文件夹的索引损坏.⑤文件夹名乱码或有空格,用ftp重命名该文件然后删除)')
$finishflag = False
Return SetError(1, 0, False)
EndIf
Case '128'
If Not _FTP_FileDelete($Conn, $aList[$I][6] & '/' & $aList[$I][0]) Then
_WaitMessage('删除FTP上的文件: "' & $aList[$I][6] & '/' & $aList[$I][0] & '"失败')
_Log('删除FTP上的文件: "' & $aList[$I][6] & '/' & $aList[$I][0] & '"失败,(可能原因①文件被锁定.②上层目录设定了不能写入的保护性操作.③有其它用户正在操作此文件.④文件的索引损坏.⑤文件名乱码或有空格,用ftp重命名该文件然后删除)')
$finishflag = False
Return SetError(2, 0, False)
EndIf
EndSwitch
Next
If Not _FTP_DirDelete($Conn, $Dir) Then
_WaitMessage('删除FTP上的目录: "' & $Dir & '"失败')
_Log('删除FTP上的目录: "' & $Dir & '"失败')
$finishflag = False
Return SetError(3, 0, False)
EndIf
_WaitMessage('', False, False)
Return SetError(0, 0, True)
EndFunc ;==>_FTP_DelTree
Func _FtpFilelistEx(ByRef $aArray, $Conn, $searchdir);这个你可以照搬
__FtpFilelist($aArray, $Conn, $searchdir)
ReDim $aArray[$aArray[0][0] + 1][UBound($aArray, 2)]
;~ _ArrayDisplay($aArray,'Debug~~~')
EndFunc ;==>_FtpFilelistEx
Func __FtpFilelist(ByRef $aArray, $Conn, $searchdir);这个你可以照搬
Local $iStep = 40000
If $aArray[0][0] == '' Then $aArray[0][0] = 0
_FTP_DirSetCurrent($Conn, $searchdir)
Local $aFile = _FTP_ListToArrayEx($Conn, 0)
If UBound($aArray, 1) <= $aArray[0][0] + 1 Then
If UBound($aFile, 1) <= $iStep Then
ReDim $aArray[UBound($aArray, 1) + $iStep][UBound($aFile, 2) + 1]
Else
ReDim $aArray[UBound($aArray, 1) + UBound($aFile, 1)][UBound($aFile, 2) + 1]
EndIf
EndIf
Local $DirFound = 0, $CurrentDir = _FTP_DirGetCurrent($Conn)
For $I = 1 To UBound($aFile, 1) - 1
If ($aFile[$I][0] == '.') Or ($aFile[$I][0] == '..') Then ContinueLoop
For $J = 0 To UBound($aFile, 2) - 1
$aArray[$aArray[0][0] + 1][$J] = $aFile[$I][$J]
Next
$aArray[$aArray[0][0] + 1][UBound($aFile, 2)] = $CurrentDir
$aArray[0][0] += 1
If $aFile[$I][2] == '16' Then ;是文件夹
$DirFound += 1
__FtpFilelist($aArray, $Conn, $CurrentDir & '/' & $aFile[$I][0])
EndIf
Next
If $DirFound = 0 Then Return
EndFunc ;==>__FtpFilelist
|