271 lines
6.7 KiB
Plaintext
271 lines
6.7 KiB
Plaintext
''
|
|
''
|
|
'' FTP class (Public Domain code - enjoy).
|
|
'' Windows only. Uses WinInet system functions.
|
|
'' Paul Squires of PlanetSquires Software (August 2015)
|
|
''
|
|
'' Compiler: FreeBASIC 1.03 (32-bit) (64-bit)
|
|
''
|
|
|
|
#Include Once "windows.bi"
|
|
#Include Once "\win\wininet.bi"
|
|
|
|
' //
|
|
' //
|
|
' //
|
|
Type clsFTP
|
|
Private:
|
|
m_hSession As HINTERNET
|
|
m_hConnection As HINTERNET
|
|
m_LastError As Integer
|
|
m_ServerPort As Integer
|
|
m_ServerName As String
|
|
m_UserName As String
|
|
m_Password As String
|
|
|
|
Public:
|
|
Declare Constructor
|
|
Declare Destructor
|
|
Declare Property hSession() As HINTERNET
|
|
Declare Property hSession(Byval nValue As HINTERNET)
|
|
Declare Property hConnection() As HINTERNET
|
|
Declare Property hConnection(Byval nValue As HINTERNET)
|
|
Declare Property LastError() As Integer
|
|
Declare Property ServerPort(Byval nValue As Integer)
|
|
Declare Property ServerPort() As Integer
|
|
Declare Property LastError(Byval nValue As Integer)
|
|
Declare Property ServerName() As String
|
|
Declare Property ServerName(Byval sValue As String)
|
|
Declare Property UserName() As String
|
|
Declare Property UserName(Byval sValue As String)
|
|
Declare Property Password() As String
|
|
Declare Property Password(Byval sValue As String)
|
|
Declare Function Connect Overload() As WINBOOL
|
|
Declare Function Connect Overload(Byval sServerName As String, _
|
|
Byval sServerPort As Integer, _
|
|
Byval sUserName As String, _
|
|
Byval sPassword As String) As WINBOOL
|
|
Declare Sub Disconnect()
|
|
Declare Function SetCurrentFolder(Byval sFolderName As String) As WINBOOL
|
|
Declare Function GetCurrentFolder() As String
|
|
Declare Function RenameFile(Byval sOldFilename As String, _
|
|
Byval sNewFilename As String) As WINBOOL
|
|
Declare Function UploadFile(Byval sLocal As String, _
|
|
Byval sRemote As String) As WINBOOL
|
|
Declare Function DownloadFile(Byval sLocal As String, _
|
|
Byval sRemote As String) As WINBOOL
|
|
Declare Function KillFile(Byval sRemote As String) As WINBOOL
|
|
End Type
|
|
|
|
|
|
''
|
|
'' Initialize the class
|
|
''
|
|
Constructor clsFTP
|
|
m_ServerPort = INTERNET_DEFAULT_FTP_PORT ' port 21
|
|
End Constructor
|
|
|
|
|
|
''
|
|
'' Close any open connection and session
|
|
''
|
|
Destructor clsFTP
|
|
this.Disconnect
|
|
End Destructor
|
|
|
|
|
|
''
|
|
'' hSession (Property)
|
|
''
|
|
Property clsFTP.hSession() As HINTERNET
|
|
Property = this.m_hSession
|
|
End Property
|
|
|
|
Property clsFTp.hSession(Byval nValue As HINTERNET)
|
|
this.m_hSession = nValue
|
|
End Property
|
|
|
|
|
|
''
|
|
'' hConnection (Property)
|
|
''
|
|
Property clsFTP.hConnection() As HINTERNET
|
|
Property = this.m_hConnection
|
|
End Property
|
|
|
|
Property clsFTp.hConnection(Byval nValue As HINTERNET)
|
|
this.m_hConnection = nValue
|
|
End Property
|
|
|
|
|
|
''
|
|
'' LastError (Property)
|
|
''
|
|
Property clsFTP.LastError() As Integer
|
|
Property = this.m_LastError
|
|
End Property
|
|
|
|
Property clsFTp.LastError(Byval nValue As Integer)
|
|
this.m_LastError = nValue
|
|
End Property
|
|
|
|
|
|
''
|
|
'' ServerPort (Property)
|
|
''
|
|
Property clsFTP.ServerPort() As Integer
|
|
Property = this.m_ServerPort
|
|
End Property
|
|
|
|
Property clsFTp.ServerPort(Byval nValue As Integer)
|
|
this.m_ServerPort = nValue
|
|
End Property
|
|
|
|
|
|
''
|
|
'' ServerName (Property)
|
|
''
|
|
Property clsFTP.ServerName() As String
|
|
Property = this.m_ServerName
|
|
End Property
|
|
|
|
Property clsFTp.ServerName(Byval sValue As String)
|
|
this.m_ServerName = sValue
|
|
End Property
|
|
|
|
|
|
''
|
|
'' UserName (Property)
|
|
''
|
|
Property clsFTP.UserName() As String
|
|
Property = this.m_UserName
|
|
End Property
|
|
|
|
Property clsFTp.UserName(Byval sValue As String)
|
|
this.m_UserName = sValue
|
|
End Property
|
|
|
|
|
|
''
|
|
'' Password (Property)
|
|
''
|
|
Property clsFTP.Password() As String
|
|
Property = this.m_Password
|
|
End Property
|
|
|
|
Property clsFTp.Password(Byval sValue As String)
|
|
this.m_Password = sValue
|
|
End Property
|
|
|
|
|
|
''
|
|
'' Close current connection and end session
|
|
''
|
|
Sub clsFTP.Disconnect()
|
|
InternetCloseHandle this.hConnection
|
|
InternetCloseHandle this.hSession
|
|
this.hConnection = 0: this.hSession = 0
|
|
End Sub
|
|
|
|
|
|
''
|
|
'' Connect to an ftp host (overload). Returns TRUE if successful.
|
|
''
|
|
Function clsFTP.Connect Overload() As WINBOOL
|
|
this.hSession = InternetOpen("ftpClass", INTERNET_OPEN_TYPE_DIRECT, "", "", 0)
|
|
If this.hSession = 0 Then
|
|
this.LastError = GetLastError
|
|
Function = False: Exit Function
|
|
End If
|
|
|
|
this.hConnection = InternetConnect(_
|
|
this.hSession, this.ServerName, this.ServerPort, _
|
|
this.UserName, this.Password, _
|
|
INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0)
|
|
|
|
If this.hConnection = 0 Then
|
|
this.LastError = GetLastError
|
|
InternetCloseHandle(this.hSession)
|
|
Function = False: Exit Function
|
|
End If
|
|
|
|
Function = True
|
|
End Function
|
|
|
|
|
|
''
|
|
'' Connect to an ftp host (overload). Returns TRUE if successful.
|
|
''
|
|
Function clsFTP.Connect Overload (Byval sServerName As String, _
|
|
Byval nServerPort As Integer, _
|
|
Byval sUserName As String, _
|
|
Byval sPassword As String) As WINBOOL
|
|
|
|
this.ServerName = sServerName
|
|
this.ServerPort = nServerPort
|
|
this.UserName = sUserName
|
|
this.Password = sPassword
|
|
|
|
Function = this.Connect
|
|
End Function
|
|
|
|
|
|
''
|
|
'' Change to a folder on the server. Returns TRUE if successful.
|
|
''
|
|
Function clsFTP.SetCurrentFolder(Byval sFolderName As String) As WINBOOL
|
|
Function = FtpSetCurrentDirectory(this.hConnection, sFolderName)
|
|
this.LastError = GetLastError
|
|
End Function
|
|
|
|
|
|
''
|
|
'' Retrieves the name of current folder on the server.
|
|
''
|
|
Function clsFTP.GetCurrentFolder() As String
|
|
Dim zBuffer As ZString * MAX_PATH
|
|
Dim nLength As Integer = MAX_PATH
|
|
|
|
FtpGetCurrentDirectory(this.hConnection, zBuffer, Cast(LPDWORD, @nLength))
|
|
this.LastError = GetLastError
|
|
|
|
Function = zBuffer
|
|
End Function
|
|
|
|
|
|
''
|
|
'' Rename a file on the server. Returns TRUE if successful.
|
|
''
|
|
Function clsFTP.RenameFile(Byval sOldFilename As String, Byval sNewFilename As String) As WINBOOL
|
|
Function = FtpRenameFile(this.hConnection, sOldFilename, sNewFilename)
|
|
this.LastError = GetLastError
|
|
End Function
|
|
|
|
|
|
''
|
|
'' Upload a file to the server. Returns TRUE if successful.
|
|
''
|
|
Function clsFTP.UploadFile(Byval sLocal As String, Byval sRemote As String) As WINBOOL
|
|
Function = FtpPutFile(this.hConnection, sLocal, sRemote, FTP_TRANSFER_TYPE_BINARY, 0)
|
|
this.LastError = GetLastError
|
|
End Function
|
|
|
|
|
|
''
|
|
'' Download a file from the server. Returns TRUE if successful.
|
|
''
|
|
Function clsFTP.DownloadFile(Byval sLocal As String, Byval sRemote As String) As WINBOOL
|
|
Function = FtpGetFile(this.hConnection, sRemote, sLocal, False, _
|
|
FILE_ATTRIBUTE_NORMAL, FTP_TRANSFER_TYPE_BINARY Or INTERNET_FLAG_RELOAD, 0)
|
|
this.LastError = GetLastError
|
|
End Function
|
|
|
|
|
|
''
|
|
'' Remove a file from the server. Returns TRUE if successful.
|
|
''
|
|
Function clsFTP.KillFile(Byval sRemote As String) As WINBOOL
|
|
Function = FtpDeleteFile(this.hConnection, sRemote)
|
|
this.LastError = GetLastError
|
|
End Function
|