Mein FTP Client funktioniert über die "wininet.dll".
Hab da leider keine Möglichkeit gefunden, einzelne Kommandos zu senden.
Wenn ich periodisch das Verzeichnis neu auflisten lasse, wird die Verbindung nicht getrennt.
Nachteil:
bei grossen Verzeichnissen wird das Programm in der Zeit blockiert.
Hier mein FTP-Modul:
Option Explicit
Public 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
Public 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
Public Declare Function InternetCloseHandle Lib "wininet.dll" _
(ByVal hInet As Long) As Integer
Public Declare Function FtpSetCurrentDirectory Lib "wininet.dll" _
Alias "FtpSetCurrentDirectoryA" (ByVal hFtpSession As _
Long, ByVal lpszDirectory As String) As Long
Public 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
Public Declare Function InternetFindNextFile Lib "wininet.dll" _
Alias "InternetFindNextFileA" (ByVal hFind As Long, _
lpvFindData As WIN32_FIND_DATA) As Long
Public Declare Function FtpGetFile Lib "wininet.dll" Alias _
"FtpGetFileA" (ByVal hFtpSession As Long, ByVal _
lpszRemoteFile As String, ByVal lpszNewFile As String, _
ByVal fFailIfExists As Boolean, ByVal dwFlagsAndAttributes _
As Long, ByVal dwFlags As Long, ByVal dwContext As Long) _
As Long
Public Declare Function FtpPutFile Lib "wininet.dll" Alias _
"FtpPutFileA" (ByVal hFtpSession As Long, ByVal _
lpszLocalFile As String, ByVal lpszRemoteFile As String, _
ByVal dwFlags As Long, ByVal dwContext As Long) As Long
Public Declare Function FtpDeleteFile Lib "wininet.dll" _
Alias "FtpDeleteFileA" (ByVal hFtpSession As Long, _
ByVal lpszFileName As String) As Long
Public Declare Function FtpRenameFile Lib "wininet.dll" _
Alias "FtpRenameFileA" (ByVal hFtpSession As Long, _
ByVal lpszFromFileName As String, ByVal lpszToFileName _
As String) As Long
Public Declare Function FtpCreateDirectory Lib "wininet" _
Alias "FtpCreateDirectoryA" (ByVal hFtpSession As _
Long, ByVal lpszDirectory As String) As Long
Public Declare Function FtpRemoveDirectory Lib "wininet" _
Alias "FtpRemoveDirectoryA" (ByVal hFtpSession As _
Long, ByVal lpszDirectory As String) As Long
Public Declare Function InternetGetLastResponseInfo Lib _
"wininet.dll" Alias "InternetGetLastResponseInfoA" _
(lpdwError As Long, ByVal lpszBuffer As String, _
lpdwBufferLength As Long) As Long
... (Mehr kann ich leider nicht posten)
Das Verzeichnis auflisten mach ich mit:
Public Sub fListDir(fDir As String)
Dim hFile As Long, Result As Long
ReDim FileList(0 To 0)
If chFDir(fDir) Then
MousePointer = vbHourglass
If PrgLanguage = 1 Then Call StatusText("Lese Verzeichnis...")
If PrgLanguage = 2 Then Call StatusText("Reading Path...")
fData.cFileName = String(MAX_PATH, 0)
hFile = FtpFindFirstFile(hConnection, Trim$(Text6.Text), fData, 0, 0)
Call FileAdd
Do
fData.cFileName = String(MAX_PATH, 0)
Result = InternetFindNextFile(hFile, fData)
If Result <> 0 Then Call FileAdd
Loop Until (Result = 0)
Call InternetCloseHandle(hFile)
Call GetStatus
MousePointer = vbDefault
If Left$(FileList(0).cFileName, 1) <> "." Then
fData.dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY
fData.cFileName = "." & Chr$(0)
Call FileAdd
fData.cFileName = ".." & Chr$(0)
Call FileAdd
End If
End If
End Sub Nachtrag:
hab jetzt eine Möglichkeit gefunden, ich lasse einfach periodisch diesen Code ausführen:
fData.cFileName = String(MAX_PATH, 0)
hFile = FtpFindFirstFile(hConnection, Trim$(Text6.Text), fData, 0, 0) Damit bleibt die Verbindung bestehen.
Danke für eure Antworten.
mfg
Shorty
------------------------------------------------
man lernt nie aus... |