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