'我写的递归删除文件夹
Public Sub RemoveCurrentDirectory(ByVal CurrentDirectory As String)
Dim Item As cDirItem
Dim sAttr As String
If Right(CurrentDirectory, 1) <> "/" Then CurrentDirectory = CurrentDirectory & "/"
SetFTPDirectory CurrentDirectory
Debug.Print "Current Directory: " & CurrentDirectory
GetDirectoryListing "*.*"
For Each Item In mDirCol
If Item.Directory Then
RemoveCurrentDirectory CurrentDirectory & Item.Filename
Else
DeleteFTPFile (CurrentDirectory & Item.Filename)
End If
Next
Debug.Print "RemoveFTPDirectory=" & CurrentDirectory
If Not RemoveFTPDirectory(CurrentDirectory) Then
MsgBox szErrorMessage
'当删除一个空文件夹时报错:
'500 The process cannot access the file because it is being used by another process .
End If
End Sub
Public Sub RemoveCurrentDirectory(ByVal CurrentDirectory As String)
Dim Item As cDirItem
Dim sAttr As String
If Right(CurrentDirectory, 1) <> "/" Then CurrentDirectory = CurrentDirectory & "/"
SetFTPDirectory CurrentDirectory
Debug.Print "Current Directory: " & CurrentDirectory
GetDirectoryListing "*.*"
For Each Item In mDirCol
If Item.Directory Then
RemoveCurrentDirectory CurrentDirectory & Item.Filename
Else
DeleteFTPFile (CurrentDirectory & Item.Filename)
End If
Next
Debug.Print "RemoveFTPDirectory=" & CurrentDirectory
If Not RemoveFTPDirectory(CurrentDirectory) Then
MsgBox szErrorMessage
'当删除一个空文件夹时报错:
'500 The process cannot access the file because it is being used by another process .
End If
End Sub
解决方案 »
- Microsoft Visual Studio .NET 的那种菜单效果 VB 怎么实现
- response.write可以给变量赋值吗?
- 为什么VB控制word另存为txt后是乱码?
- 请指教:timer中不能使用adodc的refresh方法
- 在MSFlexGrid控件中,比如实现输入员工编号,跳出员工姓名,什么实现。
- 如何在Excel中自动套用公式?
- Windows98下添加自定义纸张类型
- recordcount 的问题?
- 请问在evb中,怎样把unicode转化成ansi 其widechartomultibyte()函数的具体用法。(在线等待)请各位帮帮忙了!
- 大家早上好!请问一个数据更新的问题...
- 关于比较时间的问题
- 急!为什么当 SQL SERVER Procedure较长时不能直接返回记录集
Private Const FTP_TRANSFER_TYPE_UNKNOWN = &H0
Private Const FTP_TRANSFER_TYPE_ASCII = &H1
Private Const FTP_TRANSFER_TYPE_BINARY = &H2
Private Const INTERNET_DEFAULT_FTP_PORT = 21
Private Const INTERNET_SERVICE_FTP = 1
Private Const INTERNET_FLAG_PASSIVE = &H8000000
Private Const INTERNET_OPEN_TYPE_PRECONFIG = 0
Private Const INTERNET_OPEN_TYPE_DIRECT = 1
Private Const INTERNET_OPEN_TYPE_PROXY = 3
Private Const INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY = 4
Private Const MAX_PATH = 260
Private Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type
Private Type WIN32_FIND_DATA
dwFileAttributes As Long
ftCreationTime As FILETIME
ftLastAccessTime As FILETIME
ftLastWriteTime As FILETIME
nFileSizeHigh As Long
nFileSizeLow As Long
dwReserved0 As Long
dwReserved1 As Long
cFileName As String * MAX_PATH
cAlternate As String * 14
End Type
Private Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInet As Long) As Integer
Private Declare Function InternetConnect Lib "wininet.dll" Alias "InternetConnectA" (ByVal hInternetSession As Long, ByVal sServerName As String, ByVal nServerPort As Integer, ByVal sUserName As String, ByVal sPassword As String, ByVal lService As Long, ByVal lFlags As Long, ByVal lContext As Long) As Long
Private Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Long) As Long
Private Declare Function FtpSetCurrentDirectory Lib "wininet.dll" Alias "FtpSetCurrentDirectoryA" (ByVal hFtpSession As Long, ByVal lpszDirectory As String) As Boolean
Private Declare Function FtpGetCurrentDirectory Lib "wininet.dll" Alias "FtpGetCurrentDirectoryA" (ByVal hFtpSession As Long, ByVal lpszCurrentDirectory As String, lpdwCurrentDirectory As Long) As Long
Private Declare Function FtpCreateDirectory Lib "wininet.dll" Alias "FtpCreateDirectoryA" (ByVal hFtpSession As Long, ByVal lpszDirectory As String) As Boolean
Private Declare Function FtpRemoveDirectory Lib "wininet.dll" Alias "FtpRemoveDirectoryA" (ByVal hFtpSession As Long, ByVal lpszDirectory As String) As Boolean
Private Declare Function FtpDeleteFile Lib "wininet.dll" Alias "FtpDeleteFileA" (ByVal hFtpSession As Long, ByVal lpszFileName As String) As Boolean
Private Declare Function FtpRenameFile Lib "wininet.dll" Alias "FtpRenameFileA" (ByVal hFtpSession As Long, ByVal lpszExisting As String, ByVal lpszNew As String) As Boolean
Private Declare Function FtpGetFile Lib "wininet.dll" Alias "FtpGetFileA" (ByVal hConnect As Long, ByVal lpszRemoteFile As String, ByVal lpszNewFile As String, ByVal fFailIfExists As Long, ByVal dwFlagsAndAttributes As Long, ByVal dwFlags As Long, ByRef dwContext As Long) As Boolean
Private Declare Function FtpPutFile Lib "wininet.dll" Alias "FtpPutFileA" (ByVal hConnect As Long, ByVal lpszLocalFile As String, ByVal lpszNewRemoteFile As String, ByVal dwFlags As Long, ByVal dwContext As Long) As Boolean
Private Declare Function InternetGetLastResponseInfo Lib "wininet.dll" Alias "InternetGetLastResponseInfoA" (lpdwError As Long, ByVal lpszBuffer As String, lpdwBufferLength As Long) As Boolean
Private Declare Function FtpFindFirstFile Lib "wininet.dll" Alias "FtpFindFirstFileA" (ByVal hFtpSession As Long, ByVal lpszSearchFile As String, lpFindFileData As WIN32_FIND_DATA, ByVal dwFlags As Long, ByVal dwContent As Long) As Long
Private Declare Function InternetFindNextFile Lib "wininet.dll" Alias "InternetFindNextFileA" (ByVal hFind As Long, lpvFindData As WIN32_FIND_DATA) As Long
Private m_FtpOn As String
Private m_FtpHandle As Long
Private m_InterOpen As Long
Private m_OrgPath As String
Private m_CurDir As String
Option Explicit
Public Property Get InternetHandle() As Long
InternetHandle = m_InterOpen
End Property
Public Property Get FtpHandle() As Long
FtpHandle = m_FtpHandle
End Property
Public Property Let CurrentDir(ByVal vData As String)
If Not m_FtpHandle = 0 Then
FtpSetCurrentDirectory m_FtpHandle, vData
m_CurDir = vData
End If
End Property
Public Property Get CurrentDir() As String
CurrentDir = m_CurDir
End Property
Public Function PutFile(FileName As String, RemoteName As String) As Boolean
PutFile = FtpPutFile(m_FtpHandle, FileName, RemoteName, FTP_TRANSFER_TYPE_UNKNOWN, ByVal 0&)
End Function
Public Function RenameFile(OldName As String, NewName As String) As Boolean
RenameFile = FtpRenameFile(m_FtpHandle, OldName, NewName)
End Function
Public Function GetFile(FileName As String, RemoteName As String) As Boolean
GetFile = FtpGetFile(m_FtpHandle, FileName, RemoteName, False, 0, FTP_TRANSFER_TYPE_UNKNOWN, ByVal 0&)
End Function
Public Function DeleteFile(RemoteFile As String) As Boolean
DeleteFile = FtpDeleteFile(m_FtpHandle, RemoteFile)
End Function
Public Function RemoveDir(DirName As String) As Boolean
RemoveDir = FtpRemoveDirectory(m_FtpHandle, DirName)
End Function
Public Function CreateDir(DirName As String) As Boolean
CreateDir = FtpCreateDirectory(m_FtpHandle, DirName)
End Function
Public Function InternetCon(FtpServer As String, Login As String, Password As String, Passive As Boolean) As Boolean
Dim hConnection As Long, hOpen As Long, rc As Long, dwBack As Long
hOpen = InternetOpen(App.Title, INTERNET_OPEN_TYPE_PRECONFIG, vbNullChar, vbNullChar, 0)
hConnection = InternetConnect(hOpen, FtpServer, INTERNET_DEFAULT_FTP_PORT, Login, Password, INTERNET_SERVICE_FTP, IIf(Passive, INTERNET_FLAG_PASSIVE, 0), 0)
If Not hConnection = 0 Then
m_FtpOn = FtpServer
m_InterOpen = hOpen
m_FtpHandle = hConnection
m_OrgPath = String$(MAX_PATH, vbNullChar)
dwBack = MAX_PATH
rc = FtpGetCurrentDirectory(hConnection, m_OrgPath, dwBack)
m_CurDir = Left$(m_OrgPath, dwBack)
End If
End Function
Public Sub InternetDisCon()
InternetCloseHandle m_FtpHandle
InternetCloseHandle m_InterOpen
End Sub
Public Sub EnumFiles(FileNames() As String)
Dim pData As WIN32_FIND_DATA, hFind As Long, lRet As Long
Dim FileNum As Long, tmpStr() As String
pData.cFileName = String(MAX_PATH, 0)
hFind = FtpFindFirstFile(m_FtpHandle, "*.*", pData, 0, 0)
If Not hFind = 0 Then
ReDim Preserve FileNames(FileNum)
tmpStr = Split(pData.cFileName, vbNullChar)
FileNames(FileNum) = tmpStr(0)
FileNum = FileNum + 1
pData.cFileName = String(MAX_PATH, vbNullChar)
lRet = InternetFindNextFile(hFind, pData)
Do Until lRet = 0
ReDim Preserve FileNames(FileNum)
tmpStr = Split(pData.cFileName, vbNullChar)
FileNames(FileNum) = tmpStr(0)
FileNum = FileNum + 1
pData.cFileName = String(MAX_PATH, vbNullChar)
lRet = InternetFindNextFile(hFind, pData)
Loop
InternetCloseHandle hFind
End If
End Sub
Public Function ShowError() As String
Dim lErr As Long, sErr As String, lenBuf As Long
sErr = String(MAX_PATH, 0)
lenBuf = MAX_PATH
InternetGetLastResponseInfo lErr, sErr, lenBuf
sErr = Left$(sErr, lenBuf)
ShowError = sErr
End Function
我实现的功能是把递归上传文件和文件夹.或者递归下载文件和文件夹.
但是删除还没有做..
盼望和你讨论.
另外.你是否实现了断点上传和断点下载?
还有.你是否实现了读取服务器上的文件夹的图标呢?
实现的功能是上传.下载递归文件夹.
还没有做删除.
另外.你是否实现了上传和下载的断点续传?
还有.你是否能实现得到FTP服务器上的文件或者文件夹的图标?(我虽然得到了文件和文件夹.但是图标没有得到)
谢谢.希望和你讨论这些..
[email protected]
经过测试这个问题我已经解决了
如果大家有对Ftp讨论兴趣的话,请写信给我 [email protected]
代码如下'删除文件夹
Public Sub RemoveCurrentDirectory(ByVal CurrentDirectory As String)
Dim Item As cDirItem
Dim sAttr As String
Dim sDirectory As String
Dim sfatherDirectory As String
On Error GoTo ErrorHandler:
If Right(CurrentDirectory, 1) <> "/" Then CurrentDirectory = CurrentDirectory & "/"
SetFTPDirectory CurrentDirectory
Debug.Print "Current Directory: " & CurrentDirectory
GetDirectoryListing "*.*"
For Each Item In mDirCol
If Item.Directory Then
RemoveCurrentDirectory CurrentDirectory & Item.Filename
Else
If Not DeleteFTPFile(CurrentDirectory & Item.Filename) Then
Exit Sub
End If
End If
Next
Debug.Print "RemoveFTPDirectory=" & CurrentDirectory
'+++++++++++++++++++++++ sly ++++++++++++++++++++++
If CurrentDirectory = strCurrentftpDirectory Then
If blStartup Then
blStartup = False
RemoveCurrentDirectory CurrentDirectory
Else
' sfatherDirectory = GetFatherDirectory(CurrentDirectory)
' If sfatherDirectory <> "" Then
' If SetFTPDirectory(sfatherDirectory) Then
' If Not RemoveFTPDirectory(CurrentDirectory) Then
' Debug.Print szErrorMessage
' RemoveCurrentDirectory CurrentDirectory
' End If
If IsEmptyDirectory(CurrentDirectory) Then
sfatherDirectory = GetFatherDirectory(CurrentDirectory)
If sfatherDirectory <> "" Then
If SetFTPDirectory(sfatherDirectory) Then
If Not RemoveFTPDirectory(CurrentDirectory) Then
Exit Sub
End If
Else
Exit Sub
End If
End If
Else
RemoveCurrentDirectory CurrentDirectory
End If
' End If
' End If
Exit Sub
End If
Else
' sfatherDirectory = GetFatherDirectory(CurrentDirectory)
' If sfatherDirectory <> "" Then
' If SetFTPDirectory(sfatherDirectory) Then
' If Not RemoveFTPDirectory(CurrentDirectory) Then
' Debug.Print szErrorMessage
' RemoveCurrentDirectory CurrentDirectory
' End If
If IsEmptyDirectory(CurrentDirectory) Then
sfatherDirectory = GetFatherDirectory(CurrentDirectory)
If sfatherDirectory <> "" Then
If SetFTPDirectory(sfatherDirectory) Then
If Not RemoveFTPDirectory(CurrentDirectory) Then
Exit Sub
End If
Else
Exit Sub
End If
End If
Else
RemoveCurrentDirectory CurrentDirectory
End If
' End If
' End If
End If
'++++++++++++++++++++++++++++++++++++++++++++++++++++++++Exit Sub
ErrorHandler:
End Sub