>Imports System.IO > >Namespace Framework > > Public Class FTP > > ' This is used for specific FTP server setup where we need to use the drive assignation > ' in order to transfer a file > Public cDrive As String = "" > > Public cHost As String = "" > Public cLocalFile As String = "" > Public cMessage As String = "" > Public cPassword As String = "" > Public cRemoteDirectory As String = "" > Public cRemoteFile As String = "" > Public cRemoteFileForTheRenameOfTheFile As String = "" > Public cUsername As String = "" > Public lFileExist As Boolean = False > Public nBuffer As Integer = 4096 > > ' Number of files in the directory > Public nCount As Integer = 0 > > Public nSecond As Integer = 0 > > ' Server type > ' 1 - FTP > ' 2 - FTP/SSL (AUTH SSL) > ' 3 - FTPS/Implicit SSL > ' 4 - HTTP > ' 5 - HTTPS > ' 6 - SFTP/SSH > Public nNoFTPProtocol As Integer = 1 > > Public nSize As Integer = 0 > Public nPort As Integer = 21 > > ' Directory collection > Public oDirectory As Collection = New Collection > > ' FileDirectory object > Public oFileDirectory As Framework.FileDirectory > > ' Originator > Public oOriginator As System.Windows.Forms.Form = Nothing > > Private cDownloading As String = "" > Private cOf As String = "" > Private cRemaining As String = "" > Private cTo As String = "" > Private cTheFTPDirectoryDoesNotExist As String = "" > Private cTheLocalFileDoesNotExist As String = "" > Private cTheRemoteFileDoesNotExist As String = "" > Private cTransferInProgress As String = "" > Private cUnableToCloseTheConnection As String = "" > Private cUnableToCreateLocalFile As String = "" > Private cUnableToDeleteTheFile As String = "" > Private cUnableToGetAHandle As String = "" > Private cUnableToInitialize As String = "" > Private cUnableToRenameTheFile As String = "" > Private cUploading As String = "" > Private nFTPSession As Integer = 0 > Private nNoLanguage As Integer = 0 > Private nSession As Integer = 0 > Private oApp As Framework.App > Private oProcess As Framework.LXProcess > > ' This is when we access the class in a desktop mode > Sub New(ByVal toApplication As Framework.App) > oApp = toApplication > nNoLanguage = oApp.nLanguage > Init() > End Sub > > ' This is when we access the class in a Web or Web Service mode > Public Sub New(ByVal toProcess As Framework.LXProcess) > oProcess = toProcess > oApp = oProcess.oApp > nNoLanguage = oProcess.nLanguage > Init() > End Sub > > Private Function Init() As Boolean > > ' Based on the language > Select Case nNoLanguage > > ' English > Case 1 > cDownloading = "Downloading" > cOf = "of" > cRemaining = "Remaining" > cTo = "to" > cTheFTPDirectoryDoesNotExist = "The FTP directory /""##cRemoteDirectory##"" does not exist." > cTheLocalFileDoesNotExist = "The local file does not exist." > cTheRemoteFileDoesNotExist = "The remote file does not exist." > cTransferInProgress = "Transfer in progress" > cUnableToCloseTheConnection = "Unable to close the connection." > cUnableToCreateLocalFile = "Unable to create the local file." > cUnableToDeleteTheFile = "Unable to delete the file" > cUnableToGetAHandle = "Unable to get a handle on the FTP object." > cUnableToInitialize = "Unable to initialize the FTP object." > cUnableToRenameTheFile = "Unable to rename to file" > cUploading = "Uploading" > > ' French > Case 2 > cDownloading = "Téléchargement" > cOf = "de" > cRemaining = "Restant" > cTo = "à" > cTheFTPDirectoryDoesNotExist = "Le répertoire /""##cRemoteDirectory##"" n'existe pas." > cTheLocalFileDoesNotExist = "The local file does not exist." > cTheRemoteFileDoesNotExist = "Le fichier local n'existe pas." > cTransferInProgress = "Transfert en cours" > cUnableToCloseTheConnection = "Impossible de fermer la connexion." > cUnableToCreateLocalFile = "Impossible de créer le fichier local." > cUnableToDeleteTheFile = "Impossible d'enlever le fichier" > cUnableToGetAHandle = "Impossible d'obtenir un lien avec l'objet FTP." > cUnableToInitialize = "Impossible d'initialiser l'objet FTP." > cUnableToRenameTheFile = "Impossible de renommer le fichier" > cUploading = "Téléchargement" > > ' Spanish > Case 3 > cDownloading = "Downloading" > cOf = "of" > cRemaining = "Remaining" > cTo = "to" > cTheFTPDirectoryDoesNotExist = "The FTP directory /""##cRemoteDirectory##"" does not exist." > cTheLocalFileDoesNotExist = "The local file does not exist." > cTheRemoteFileDoesNotExist = "The remote file does not exist." > cTransferInProgress = "Transfer in progress" > cUnableToCloseTheConnection = "Unable to close the connection." > cUnableToCreateLocalFile = "Unable to create the local file." > cUnableToDeleteTheFile = "Unable to delete the file" > cUnableToGetAHandle = "Unable to get a handle on the FTP object." > cUnableToInitialize = "Unable to initialize the FTP object." > cUnableToRenameTheFile = "Unable to rename to file" > cUploading = "Uploading" > > ' Portuguese > Case 4 > cDownloading = "Downloading" > cOf = "of" > cRemaining = "Remaining" > cTo = "to" > cTheFTPDirectoryDoesNotExist = "The FTP directory /""##cRemoteDirectory##"" does not exist." > cTheLocalFileDoesNotExist = "The local file does not exist." > cTheRemoteFileDoesNotExist = "The remote file does not exist." > cTransferInProgress = "Transfer in progress" > cUnableToCloseTheConnection = "Unable to close the connection." > cUnableToCreateLocalFile = "Unable to create the local file." > cUnableToDeleteTheFile = "Unable to delete the file" > cUnableToGetAHandle = "Unable to get a handle on the FTP object." > cUnableToInitialize = "Unable to initialize the FTP object." > cUnableToRenameTheFile = "Unable to rename to file" > cUploading = "Uploading" > > End Select > > Return True > End Function > > ' Download a file > Public Function Download() As Boolean > Dim lcMinute As String = "" > Dim lcPort As String = "" > Dim lcServerType As String = "" > Dim lcURI As String = "" > Dim llShowAsPerPercentage As Boolean = True > Dim llSuccess As Boolean = False > Dim lnActual As Long = 0 > Dim lnActualABS As Long = 0 > Dim lnBytesRead As Integer = 0 > Dim lnContentLength As Long = 0 > Dim lnElapse As Integer = 0 > Dim lnLast As Integer = 0 > Dim lnPercentage As Integer = 0 > Dim lnDownloaded As Long = 0 > Dim lnRemaining As Long = 0 > Dim lnSecond As Integer = 0 > Dim lnStart As Double = Date.Now.Ticks > Dim loBuffer(nBuffer) As Byte > Dim loFileStream As FileStream = Nothing > Dim loFtpWebRequest As System.Net.FtpWebRequest = Nothing > Dim loFtpWebResponse As System.Net.FtpWebResponse = Nothing > Dim loProgressBar As Framework.ProgressBar = New Framework.ProgressBar(oApp) > Dim loStream As Stream = Nothing > Dim loStreamReader As StreamReader = Nothing > > ' Reset the values > cMessage = "" > nSize = 0 > > ' Initialization > lcServerType = GetServerType(nNoFTPProtocol) > > ' If the port has not been defined > If nPort = 0 Then > nPort = 21 > End If > > ' If we have a port different than 21 > If nPort <> 21 Then > lcPort = ":" + nPort.ToString > End If > > ' Trim everything > cPassword = Trim(cPassword) > cRemoteDirectory = Trim(cRemoteDirectory) > cUsername = Trim(cUsername) > > Try > > ' If we have an originator > If Not oOriginator Is Nothing Then > loProgressBar.oOriginator = oOriginator > End If > > ' Initialize the progress bar > loProgressBar.ShowProgress(0, cDownloading + " " + cLocalFile + "...") > > ' URI > lcURI = lcServerType + "://" + cHost + lcPort + "/" + cRemoteDirectory + "/" + cRemoteFile > > ' Because there is a bug in the .NET Framework with the use of > ' System.Net.WebRequestMethods.Ftp.DownloadFile which will always return -1, > ' we have to use a two step process to achieve this method > > ' FTP setup > loFtpWebRequest = System.Net.FtpWebRequest.Create(New Uri(lcURI)) > loFtpWebRequest.Credentials = New System.Net.NetworkCredential(cUsername, cPassword) > loFtpWebRequest.Method = System.Net.WebRequestMethods.Ftp.GetFileSize > loFtpWebRequest.UseBinary = True > > ' If we use FTP/SSL (AUTH SSL) > If nNoFTPProtocol = 2 Then > loFtpWebRequest.EnableSsl = True > End If > > loFtpWebResponse = loFtpWebRequest.GetResponse() > > ' Get the length > lnContentLength = loFtpWebResponse.ContentLength > > ' Assign the the public property > nSize = lnContentLength > > loFtpWebResponse.Close() > > ' FTP setup > loFtpWebRequest = System.Net.FtpWebRequest.Create(New Uri(lcURI)) > loFtpWebRequest.Credentials = New System.Net.NetworkCredential(cUsername, cPassword) > loFtpWebRequest.Method = System.Net.WebRequestMethods.Ftp.DownloadFile > loFtpWebRequest.UseBinary = True > loFtpWebRequest.UsePassive = True > loFtpWebRequest.KeepAlive = False > loFtpWebRequest.Timeout = 10000000 > loFtpWebRequest.ReadWriteTimeout = 10000000 > > ' If we use FTP/SSL (AUTH SSL) > If nNoFTPProtocol = 2 Then > loFtpWebRequest.EnableSsl = True > End If > > loFtpWebResponse = loFtpWebRequest.GetResponse() > > loStream = loFtpWebResponse.GetResponseStream() > > ' Create the file > Try > loFileStream = New FileStream(cLocalFile, FileMode.Create) > Catch loError As Exception > cMessage = cUnableToCreateLocalFile > Exit Try > End Try > > ' If the content length is greater than 100MB > If lnContentLength > 100000000 Then > llShowAsPerPercentage = False > End If > > ' While there is something to download > While True > > ' Prevent application from crashing > System.Windows.Forms.Application.DoEvents() > > ' Try to read the data > lnBytesRead = loStream.Read(loBuffer, 0, loBuffer.Length) > > If lnBytesRead = 0 Then > > ' Nothing was read, finished downloading > System.Windows.Forms.Application.DoEvents() > > Exit While > Else > > ' Write the downloaded data > loFileStream.Write(loBuffer, 0, lnBytesRead) > > ' Increment the number of uploaded bytes > lnDownloaded = lnDownloaded + lnBytesRead > > ' If we show as per the percentage > If llShowAsPerPercentage Then > lnActual = lnDownloaded / lnContentLength * 100 > lnActualABS = Math.Abs(lnActual) > > ' If the last is not the same as the actual > If lnLast <> lnActual Then > > lnElapse = ((Date.Now.Ticks - lnStart) / 10000000) > > lcMinute = oApp.SecondToFormat(lnElapse) > > lnRemaining = lnContentLength - lnDownloaded > > ' Update the progress bar > loProgressBar.ShowProgress(lnActual, _ > cDownloading + " " + cLocalFile + "..." + oApp.cCR + _ > oApp.GetFormatValue(lnDownloaded, ",") + " bytes " + cOf + " " + _ > oApp.GetFormatValue(lnContentLength, ",").ToString + " - " + cRemaining + " " + _ > oApp.GetFormatValue(lnRemaining, ",").ToString + " bytes - " + lcMinute) > > Else > > ' Update the progress bar > loProgressBar.ShowProgress(lnActual) > > End If > > lnLast = lnActualABS > Else > lnActual = lnDownloaded / lnContentLength * 100 > lnSecond = Date.Now.Second > > ' If the last is not the same as the actual > If lnLast <> lnSecond Then > > lnElapse = ((Date.Now.Ticks - lnStart) / 10000000) > > lcMinute = oApp.SecondToFormat(lnElapse) > > lnRemaining = lnContentLength - lnDownloaded > > ' Update the progress bar > loProgressBar.ShowProgress(lnActual, _ > cDownloading + " " + cLocalFile + "..." + oApp.cCR + _ > oApp.GetFormatValue(lnDownloaded, ",") + " bytes " + cOf + " " + _ > oApp.GetFormatValue(lnContentLength, ",").ToString + " - " + cRemaining + " " + _ > oApp.GetFormatValue(lnRemaining, ",").ToString + " bytes - " + lcMinute) > > Else > > ' Update the progress bar > loProgressBar.ShowProgress(lnActual) > > End If > > lnLast = lnSecond > End If > > End If > > End While > > ' Elapse time it took for the download > nSecond = lnElapse > > loStream.Close() > loFtpWebResponse.Close() > loFileStream.Close() > > llSuccess = True > Catch loError As Exception > cMessage = loError.Message + " The URI is " + lcURI + "." > End Try > > ' Make sure to remove it > loProgressBar.Dispose() > > ' Force a refresh > Windows.Forms.Application.DoEvents() > > Return llSuccess > End Function > > ' Upload a file > Public Function Upload() As Boolean > Dim lcDrive As String = "" > Dim lcMinute As String = "" > Dim lcPort As String = "" > Dim lcServerType As String = "" > Dim lcURI As String = "" > Dim llSuccess As Boolean = False > Dim lnActual As Integer = 0 > Dim lnActualABS As Integer = 0 > Dim lnContentLength As Integer = 0 > Dim lnElapse As Integer = 0 > Dim lnFileLength As Integer = 0 > Dim lnLast As Integer = 0 > Dim lnPercentage As Integer = 0 > Dim lnRemaining As Integer = 0 > Dim lnStart As Double = Date.Now.Ticks > Dim lnUploaded As Integer = 0 > Dim loBuffer(nBuffer) As Byte > Dim loFileStream As FileStream = Nothing > Dim loFtpWebRequest As System.Net.FtpWebRequest = Nothing > Dim loProgressBar As Framework.ProgressBar = New Framework.ProgressBar(oApp) > Dim loStream As Stream = Nothing > > ' Reset the values > cMessage = "" > nSize = 0 > > ' Initialization > lcServerType = GetServerType(nNoFTPProtocol) > > ' If the port has not been defined > If nPort = 0 Then > nPort = 21 > End If > > ' If we have a port different than 21 > If nPort <> 21 Then > lcPort = ":" + nPort.ToString > End If > > ' Trim everything > cHost = Trim(cHost) > cPassword = Trim(cPassword) > cRemoteDirectory = Trim(cRemoteDirectory) > cUsername = Trim(cUsername) > > Try > > ' If the local file does not exist > If Not oApp.FileExist(cLocalFile) Then > cMessage = cTheLocalFileDoesNotExist > Exit Try > End If > > loFileStream = New FileStream(cLocalFile, FileMode.Open) > > ' Get the length of the file > lnFileLength = loFileStream.Length > > ' Assign to the public property > nSize = lnFileLength > > ' If we have an originator > If Not oOriginator Is Nothing Then > loProgressBar.oOriginator = oOriginator > End If > > ' Initialize the progress bar > loProgressBar.ShowProgress(0, cUploading + " " + cLocalFile + "...") > > ' If we have a drive > If cDrive.Length > 0 Then > lcDrive = cDrive + ":/" > End If > > ' URI > lcURI = lcServerType + "://" + cHost + lcPort + "/" + lcDrive + cRemoteDirectory + "/" + cRemoteFile > > ' FTP setup > loFtpWebRequest = System.Net.FtpWebRequest.Create(New Uri(lcURI)) > loFtpWebRequest.Credentials = New System.Net.NetworkCredential(cUsername, cPassword) > loFtpWebRequest.KeepAlive = False > loFtpWebRequest.Method = System.Net.WebRequestMethods.Ftp.UploadFile > loFtpWebRequest.UseBinary = True > loFtpWebRequest.ContentLength = lnFileLength > > ' If we use FTP/SSL (AUTH SSL) > If nNoFTPProtocol = 2 Then > loFtpWebRequest.EnableSsl = True > End If > > loStream = loFtpWebRequest.GetRequestStream() > > ' Read a new set of bytes > lnContentLength = loFileStream.Read(loBuffer, 0, nBuffer) > > ' While there is something to upload > While lnContentLength <> 0 > > ' Write to the FTP > loStream.Write(loBuffer, 0, lnContentLength) > > ' Read a new set of bytes > lnContentLength = loFileStream.Read(loBuffer, 0, nBuffer) > > ' Increment the number of uploaded bytes > lnUploaded = lnUploaded + nBuffer > > lnActual = lnUploaded / lnFileLength * 100 > > lnActualABS = Math.Abs(lnActual) > > ' If the last is not the same as the actual > If lnLast <> lnActual Then > > lnElapse = ((Date.Now.Ticks - lnStart) / 10000000) > > lcMinute = oApp.SecondToFormat(lnElapse) > > lnRemaining = lnFileLength - lnUploaded > > ' Update the progress bar > loProgressBar.ShowProgress(lnActual, _ > cUploading + " " + cLocalFile + "..." + oApp.cCR + _ > oApp.GetFormatValue(lnUploaded, ",") + " bytes " + cOf + " " + _ > oApp.GetFormatValue(lnFileLength, ",") + " - " + cRemaining + " " + _ > oApp.GetFormatValue(lnRemaining, ",").ToString + " bytes - " + lcMinute) > > Else > > ' Update the progress bar > loProgressBar.ShowProgress(lnActual) > > End If > > lnLast = lnActualABS > > End While > > ' Make sure to remove it > loProgressBar.Dispose() > > ' Force a refresh > Windows.Forms.Application.DoEvents() > > ' Elapse time it took for the upload > nSecond = lnElapse > > loStream.Close() > loFileStream.Close() > > llSuccess = True > Catch loError As Exception > cMessage = loError.Message + " The URI is " + lcURI + "." > > ' If we have a stream > If Not loStream Is Nothing Then > loStream.Close() > End If > > ' If we have a file stream > If Not loFileStream Is Nothing Then > loFileStream.Close() > End If > > ' Make sure to remove it > loProgressBar.Dispose() > > ' Force a refresh > Windows.Forms.Application.DoEvents() > > End Try > > Return llSuccess > End Function > > ' Delete a file > Public Function DeleteFile() As Boolean > Dim lcDrive As String = "" > Dim lcPort As String = "" > Dim lcServerType As String = "" > Dim lcURI As String = "" > Dim llSuccess As Boolean = False > Dim loFtpWebRequest As System.Net.FtpWebRequest = Nothing > > ' Initialization > lcServerType = GetServerType(nNoFTPProtocol) > > ' Trim everything > cPassword = Trim(cPassword) > cRemoteDirectory = Trim(cRemoteDirectory) > cRemoteFile = Trim(cRemoteFile) > cUsername = Trim(cUsername) > > ' If we have a drive > If cDrive.Length > 0 Then > lcDrive = cDrive + ":/" > End If > > ' If the port has not been defined > If nPort = 0 Then > nPort = 21 > End If > > ' If we have a port different than 21 > If nPort <> 21 Then > lcPort = ":" + nPort.ToString > End If > > ' URI > lcURI = lcServerType + "://" + cHost + lcPort + "/" + lcDrive + cRemoteDirectory + "/" + cRemoteFile > > ' If the FileExist method fails > If Not FileExist() Then > Return False > End If > > ' If the file exist > If lFileExist Then > > Try > > ' FTP setup > loFtpWebRequest = System.Net.FtpWebRequest.Create(New Uri(lcURI)) > loFtpWebRequest.Credentials = New System.Net.NetworkCredential(cUsername, cPassword) > loFtpWebRequest.Method = System.Net.WebRequestMethods.Ftp.DeleteFile > > ' If we use FTP/SSL (AUTH SSL) > If nNoFTPProtocol = 2 Then > loFtpWebRequest.EnableSsl = True > End If > > ' Delete the file > loFtpWebRequest.GetResponse().Close() > > llSuccess = True > Catch loError As Exception > cMessage = cUnableToDeleteTheFile + " " + lcURI + "." + oApp.cCR + oApp.cCR + loError.Message > End Try > > Else > llSuccess = True > End If > > Return llSuccess > End Function > > ' Rename a file > Public Function RenameFile() As Boolean > Dim lcDrive As String = "" > Dim lcFile2 As String = "" > Dim lcPort As String = "" > Dim lcServerType As String = "" > Dim lcURI As String = "" > Dim lcURI2 As String = "" > Dim llSuccess As Boolean = False > Dim lnResult As Integer = 0 > Dim loFtpWebRequest As System.Net.FtpWebRequest = Nothing > > ' Initialization > lcServerType = GetServerType(nNoFTPProtocol) > > ' If we have a drive > If cDrive.Length > 0 Then > lcDrive = cDrive + ":/" > End If > > ' Trim everything > cPassword = Trim(cPassword) > cRemoteDirectory = Trim(cRemoteDirectory) > cUsername = Trim(cUsername) > > ' If the port has not been defined > If nPort = 0 Then > nPort = 21 > End If > > ' If we have a port different than 21 > If nPort <> 21 Then > lcPort = ":" + nPort.ToString > End If > > ' URI > lcURI = lcServerType + "://" + cHost + lcPort + "/" + lcDrive + cRemoteDirectory + "/" + cRemoteFile > > ' URI > lcURI2 = cRemoteFileForTheRenameOfTheFile > > Try > > ' FTP setup > loFtpWebRequest = System.Net.FtpWebRequest.Create(New Uri(lcURI)) > loFtpWebRequest.Credentials = New System.Net.NetworkCredential(cUsername, cPassword) > loFtpWebRequest.Method = System.Net.WebRequestMethods.Ftp.Rename > > ' If we use FTP/SSL (AUTH SSL) > If nNoFTPProtocol = 2 Then > loFtpWebRequest.EnableSsl = True > End If > > ' The new name > loFtpWebRequest.RenameTo = lcURI2 > > ' Rename the file > loFtpWebRequest.GetResponse().Close() > > llSuccess = True > Catch loError As Exception > cMessage = cUnableToRenameTheFile + " " + lcURI + " " + cTo + " " + lcURI2 + "." + _ > oApp.cCR + oApp.cCR + loError.Message > End Try > > Return llSuccess > End Function > > ' Detect for file existance > Public Function FileExist() As Boolean > Dim lcDrive As String = "" > Dim lcPort As String = "" > Dim lcServerType As String = "" > Dim lcURI As String = "" > Dim loRowDataView As DataRowView = Nothing > > ' Initialization > lcServerType = GetServerType(nNoFTPProtocol) > > ' Trim everything > cRemoteDirectory = Trim(cRemoteDirectory) > cRemoteFile = Trim(cRemoteFile) > > ' Reset the values > lFileExist = False > > ' If we have a drive > If cDrive.Length > 0 Then > lcDrive = cDrive + ":/" > End If > > ' If the port has not been defined > If nPort = 0 Then > nPort = 21 > End If > > ' If we have a port different than 21 > If nPort <> 21 Then > lcPort = ":" + nPort.ToString > End If > > ' URI > lcURI = lcServerType + "://" + cHost + lcPort + "/" + lcDrive + cRemoteDirectory + "/" + cRemoteFile > > ' Get the directory > If Not GetDirectory() Then > Return False > End If > > ' For each file in the directory > For Each loRowDataView In oFileDirectory.oDataView > > ' If this is the file > If UCase(Trim(loRowDataView("Name"))) = UCase(cRemoteFile) Then > lFileExist = True > Exit For > End If > > Next > > Return True > End Function > > ' Get the files from a directory > Public Function GetDirectory() As Boolean > Dim lcDate As String = "" > Dim lcDirectory As String = "" > Dim lcDrive As String = "" > Dim lcFile As String = "" > Dim lcHourMinute As String = "" > Dim lcLine As String = "" > Dim lcPort As String = "" > Dim lcServerType As String = "" > Dim lcURI As String = "" > Dim ldDate As Date = Nothing > Dim llFound As Boolean = False > Dim llSuccess As Boolean = False > Dim lnCounter As Integer = 0 > Dim lnDay As Integer = 0 > Dim lnHour As Integer = 0 > Dim lnMinute As Integer = 0 > Dim lnMonth As Integer = 0 > Dim lnOccurence As Integer = 0 > Dim lnSize As Integer = 0 > Dim lnYear As Integer = 0 > Dim loFtpWebRequest As System.Net.FtpWebRequest = Nothing > Dim loFtpWebResponse As System.Net.FtpWebResponse = Nothing > Dim loStreamReader As StreamReader = Nothing > Dim loStringBuilder As Framework.StringBuilderFile = New Framework.StringBuilderFile(oApp) > > ' Reset the value > oDirectory.Clear() > > ' Initialization > lcServerType = GetServerType(nNoFTPProtocol) > > ' Create the FileDirectory object > oFileDirectory = New Framework.FileDirectory(oApp) > > ' Trim everything > cHost = Trim(cHost) > cPassword = Trim(cPassword) > cRemoteDirectory = Trim(cRemoteDirectory) > cRemoteFile = Trim(cRemoteFile) > cUsername = Trim(cUsername) > > ' Reset the values > nCount = 0 > > ' If the port has not been defined > If nPort = 0 Then > nPort = 21 > End If > > ' If we have a port different than 21 > If nPort <> 21 Then > lcPort = ":" + nPort.ToString > End If > > ' If we have a drive > If cDrive.Length > 0 Then > lcDrive = cDrive + ":/" > End If > > ' URI > lcURI = lcServerType + "://" + cHost + lcPort + "/" + lcDrive + cRemoteDirectory > > Try > > ' FTP setup > loFtpWebRequest = System.Net.FtpWebRequest.Create(New Uri(lcURI)) > loFtpWebRequest.Credentials = New System.Net.NetworkCredential(cUsername, cPassword) > loFtpWebRequest.Method = System.Net.WebRequestMethods.Ftp.ListDirectoryDetails > > ' If we use FTP/SSL (AUTH SSL) > If nNoFTPProtocol = 2 Then > loFtpWebRequest.EnableSsl = True > End If > > loFtpWebResponse = loFtpWebRequest.GetResponse() > > loStreamReader = New StreamReader(loFtpWebResponse.GetResponseStream()) > > ' Load the files into the string builder > loStringBuilder.LoadString(loStreamReader.ReadToEnd()) > > ' For each file > For lnCounter = 1 To loStringBuilder.nLine > > ' Get the path > If Not loStringBuilder.MLine(lnCounter) Then > Exit Try > End If > > ' Get the line > lcLine = loStringBuilder.cLine > > ' If this is a file > If lcLine.StartsWith("-") Then > lcFile = Mid(lcLine, 56) > lnSize = Mid(lcLine, 30, 12) > lcDate = Mid(lcLine, 43, 12) > > ' Month > Select Case Mid(lcDate, 1, 3) > > ' January > Case "Jan" > lnMonth = 1 > > ' February > Case "Feb" > lnMonth = 2 > > ' March > Case "Mar" > lnMonth = 3 > > ' April > Case "Apr" > lnMonth = 4 > > ' May > Case "May" > lnMonth = 5 > > ' June > Case "Jun" > lnMonth = 6 > > ' July > Case "Jul" > lnMonth = 7 > > ' August > Case "Aug" > lnMonth = 8 > > ' September > Case "Sep" > lnMonth = 9 > > ' October > Case "Oct" > lnMonth = 10 > > ' November > Case "Nov" > lnMonth = 11 > > ' Decmeber > Case "Dec" > lnMonth = 12 > > End Select > > lnDay = Val(Mid(lcDate, 5, 2)) > > ' Get the hour minute portion > lcHourMinute = Mid(lcDate, 8, 5) > > ' If this is a hour minute representation > If oApp.At(":", lcHourMinute) > 0 Then > lnHour = Val(Mid(lcDate, 8, 2)) > lnMinute = Val(Mid(lcDate, 11, 2)) > lnYear = Date.Now.Year > Else > lnHour = 0 > lnMinute = 0 > lnYear = Val(Mid(lcDate, 8, 5)) > End If > > ldDate = New Date(lnYear, lnMonth, lnDay, lnHour, lnMinute, 0) > > nCount = nCount + 1 > > ' Add the file into the loFileDirectory object > If Not oFileDirectory.AddFile(lcFile, lnSize, ldDate) Then > cMessage = "" > Exit Try > End If > > Else > > ' Get the directory name > lcDirectory = Mid(lcLine, 56) > > ' If we have a value > If lcDirectory.Length > 0 Then > > ' If this is not . > If lcDirectory <> "." Then > > ' If this is not .. > If lcDirectory <> ".." Then > > ' Add the directory into the collection > AddDirectory(lcDirectory) > > End If > > End If > > End If > > End If > > Next > > llSuccess = True > Catch loError As Exception > cMessage = loError.Message + " The URI is " + lcURI + "." > End Try > > Return llSuccess > End Function > > ' Add an item in the oDirectory collection > ' expC1 Directory > Private Function AddDirectory(ByVal tcDirectory As String) As Boolean > Dim loObject(1) As Object > > loObject(1) = tcDirectory > > oDirectory.Add(loObject) > Return True > End Function > > ' Get the server type > ' expN1 Server type > Private Function GetServerType(ByVal tnNoFTPProtocol As Integer) As String > Dim lcServerType As String = "" > > ' Initialization > lcServerType = "ftp" > > ' Based on the server type > Select Case tnNoFTPProtocol > > ' FTP > Case 1 > lcServerType = "ftp" > > ' FTP/SSL (AUTH SSL) > Case 2 > lcServerType = "ftps" > > ' FTPS/Implicit SSL > Case 3 > lcServerType = "ftps" > > ' HTTP > Case 4 > lcServerType = "http" > > ' HTTPS > Case 5 > lcServerType = "https" > > ' SFTP/SSH > Case 6 > lcServerType = "sftp" > > End Select > > Return lcServerType > End Function > > End Class > >End Namespace >