Wie kann ich mit einem PB-Programm mich mit einem FTP-Server (wie home.arcor.de) verbinden, die Verzeichnis-Informationen herunterladen und Dateien hoch/runterladen?
Danke im vorraus!

Code: Alles auswählen
Enumeration 0
#INTERNET_OPEN_TYPE_PRECONFIG
#INTERNET_OPEN_TYPE_DIRECT
#INTERNET_OPEN_TYPE_PROXY = 3
#INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY
EndEnumeration
Enumeration 1
#INTERNET_SERVICE_FTP
#INTERNET_SERVICE_GOPHER
#INTERNET_SERVICE_HTTP
EndEnumeration
Enumeration 0
#FTP_TRANSFER_TYPE_UNKNOWN
#FTP_TRANSFER_TYPE_ASCII
#FTP_TRANSFER_TYPE_BINARY
#FTP_TRANSFER_TYPE_MASK = (#FTP_TRANSFER_TYPE_ASCII|#FTP_TRANSFER_TYPE_BINARY)
EndEnumeration
#INTERNET_FLAG_RELOAD = $80000000
Procedure.l FTPInit(lpszAgent.s = "FTP", dwAccesType.l = #INTERNET_OPEN_TYPE_DIRECT, lpszProxyName.s = "", lpszProxyBypass.s = "", dwFlags.l = 0)
ProcedureReturn InternetOpen_(@lpszAgent, dwAccesType, @lpszProxyName, @lpszProxyBypass, dwFlags)
EndProcedure
Procedure.l FTPConnect(hInternet.l, Server.s, User.s, Password.s, port.l = 21)
ProcedureReturn InternetConnect_(hInternet, @Server, port, User, @Password, #INTERNET_SERVICE_FTP, 0, 0)
EndProcedure
Procedure.l FTPSetDir(hConnect.l, Dir.s)
ProcedureReturn FtpSetCurrentDirectory_(hConnect, @Dir)
EndProcedure
Procedure.l FTPCreateDir(hConnect.l,Dir.s)
ProcedureReturn FtpCreateDirectory_(hConnect, @Dir)
EndProcedure
Procedure.l FTPDownload(hConnect.l, Source.s, Dest.s)
ProcedureReturn FtpGetFile_(hConnect, @Source,@Dest, 0, 0, #FTP_TRANSFER_TYPE_BINARY | #INTERNET_FLAG_RELOAD, 0)
EndProcedure
Procedure.l FTPUpload(hConnect.l, Source.s, Dest.s)
ProcedureReturn FtpPutFile_(hConnect, @Source, @Dest, #FTP_TRANSFER_TYPE_BINARY | #INTERNET_FLAG_RELOAD, 0)
EndProcedure
Procedure.l FTPClose(hInternet.l)
ProcedureReturn InternetCloseHandle_(hInternet)
EndProcedure
Procedure.l FTPRead2Mem(hConnect.l, File.s)
Protected hFile.l, Mem.l, hSize.l, hSizeError.l, lpdwNumberOfBytesRead.l
hFile = FtpOpenFile_(hConnect, @File, #GENERIC_READ, #FTP_TRANSFER_TYPE_BINARY | #INTERNET_FLAG_RELOAD, 0)
hSize = FtpGetFileSize_(hFile, @hSizeError)
If hSize > 0
Mem = AllocateMemory(hSize)
If Mem <> 0
If InternetReadFile_(hFile, Mem, hSize, @lpdwNumberOfBytesRead)
ProcedureReturn Mem
Else
FreeMemory(Mem)
ProcedureReturn -1
EndIf
EndIf
EndIf
EndProcedure
Code: Alles auswählen
Url.s = "http://www.programie.de"
User.s = "programie"
Passwort.s = "Rumpelstilzchen"
hInternet = FTPInit()
If hInternet
hConnect = FTPConnect(hInternet, Url, User, Passwort)
If hConnect
If FTPSetDir(hConnect, "myproggies\test\")
FTPDownload(hConnect.l, "test.zip", "c:\recycled\test.zip")
EndIf
FTPClose(hConnect)
EndIf
FTPClose(hInternet)
EndIf
Code: Alles auswählen
;-TOP
; Kommentar :
; Author : ts-soft
; Second Author : mk-soft
; Datei : FTPHelper.pb
; Version : 1.01
; Erstellt : ???
; Geändert : 03.01.2007
;
; Compilermode :
;
; ***************************************************************************************
Enumeration 0
#INTERNET_OPEN_TYPE_PRECONFIG
#INTERNET_OPEN_TYPE_DIRECT
#INTERNET_OPEN_TYPE_PROXY = 3
#INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY
EndEnumeration
Enumeration 1
#INTERNET_SERVICE_FTP
#INTERNET_SERVICE_GOPHER
#INTERNET_SERVICE_HTTP
EndEnumeration
Enumeration 0
#FTP_TRANSFER_TYPE_UNKNOWN
#FTP_TRANSFER_TYPE_ASCII
#FTP_TRANSFER_TYPE_BINARY
#FTP_TRANSFER_TYPE_MASK = (#FTP_TRANSFER_TYPE_ASCII|#FTP_TRANSFER_TYPE_BINARY)
EndEnumeration
#INTERNET_FLAG_RELOAD = $80000000
Structure FIND_DATA
dwFileAttributes.l
ftCreationTime.FILETIME
ftLastAccessTime.FILETIME
ftLastWriteTime.FILETIME
nFileSizeHigh.l
nFileSizeLow.l
dwReserved0.l
dwReserved1.l
cFileName.s{260}
cAlternate.s{14}
dummy.w
EndStructure
Procedure.s FormatMessage(ErrorNumber.l)
Protected len
len = FormatMessage_(#FORMAT_MESSAGE_ALLOCATE_BUFFER|#FORMAT_MESSAGE_FROM_SYSTEM,0,ErrorNumber,0,@Buffer,0,0)
If len
ProcedureReturn PeekS(Buffer, len - 2)
LocalFree_(Buffer)
Else
ProcedureReturn "Errorcode: " + Hex(ErrorNumber)
EndIf
EndProcedure
Procedure.l FTPInit(lpszAgent.s = "FTP", dwAccesType.l = #INTERNET_OPEN_TYPE_DIRECT, lpszProxyName.s = "", lpszProxyBypass.s = "", dwFlags.l = 0)
ProcedureReturn InternetOpen_(@lpszAgent, dwAccesType, @lpszProxyName, @lpszProxyBypass, dwFlags)
EndProcedure
Procedure.l FTPConnect(hInternet.l, Server.s, User.s, Password.s, port.l = 21)
ProcedureReturn InternetConnect_(hInternet, @Server, port, User, @Password, #INTERNET_SERVICE_FTP, 0, 0)
EndProcedure
Procedure.l FTPSetDir(hConnect.l, Dir.s)
ProcedureReturn FtpSetCurrentDirectory_(hConnect, @Dir)
EndProcedure
Procedure.s FTPGetDir(hConnect.l)
Protected temp.s, Size.l
temp = Space(#MAX_PATH)
Size = #MAX_PATH
If FtpGetCurrentDirectory_(hConnect, @Temp, @Size)
ProcedureReturn temp
Else
ProcedureReturn ""
EndIf
EndProcedure
Procedure FTPListDir(hConnect, Dir.s, List.FIND_DATA())
Protected hResult.l, Result.FIND_DATA
ClearList(List())
hResult = FtpFindFirstFile_(hConnect, @Dir, Result, #INTERNET_FLAG_RELOAD, 0)
If hResult
AddElement(List())
CopyMemory(Result, @List(), SizeOf(FIND_DATA))
While InternetFindNextFile_(hResult, Result)
AddElement(List())
CopyMemory(Result, @List(), SizeOf(FIND_DATA))
Wend
CloseHandle_(hResult)
ProcedureReturn #True
Else
ProcedureReturn #False
EndIf
EndProcedure
Procedure.l FTPCreateDir(hConnect.l,Dir.s)
ProcedureReturn FtpCreateDirectory_(hConnect, @Dir)
EndProcedure
Procedure.l FTPDownload(hConnect.l, Source.s, Dest.s)
ProcedureReturn FtpGetFile_(hConnect, @Source,@Dest, 0, 0, #FTP_TRANSFER_TYPE_BINARY | #INTERNET_FLAG_RELOAD, 0)
EndProcedure
Procedure.l FTPUpload(hConnect.l, Source.s, Dest.s)
ProcedureReturn FtpPutFile_(hConnect, @Source, @Dest, #FTP_TRANSFER_TYPE_BINARY | #INTERNET_FLAG_RELOAD, 0)
EndProcedure
Procedure.l FTPClose(hInternet.l)
ProcedureReturn InternetCloseHandle_(hInternet)
EndProcedure
Procedure.l FTPRead2Mem(hConnect.l, File.s)
Protected hFile.l, Mem.l, hSize.l, hSizeError.l, lpdwNumberOfBytesRead.l
hFile = FtpOpenFile_(hConnect, @File, #GENERIC_READ, #FTP_TRANSFER_TYPE_BINARY | #INTERNET_FLAG_RELOAD, 0)
hSize = FtpGetFileSize_(hFile, @hSizeError)
If hSize > 0
Mem = AllocateMemory(hSize)
If Mem <> 0
If InternetReadFile_(hFile, Mem, hSize, @lpdwNumberOfBytesRead)
ProcedureReturn Mem
Else
FreeMemory(Mem)
ProcedureReturn -1
EndIf
EndIf
EndIf
EndProcedure
; Test Beispiel
Global NewList Files.FIND_DATA()
hInternet = FTPInit()
If hInternet = 0
Debug "Error: Init"
End
EndIf
hConnect = FTPConnect(hInternet, "ftp.avm.de", "", "")
If hConnect = 0
Debug "Error: Connet"
End
EndIf
If FTPListDir(hConnect, "", Files()) = 0
Debug FormatMessage(GetLastError_())
FTPClose(hInternet)
End
EndIf
ForEach Files()
With Files()
Debug \cFileName
EndWith
Next
FTPClose(hInternet)