All source code is available in this email below, you do not need to access the web site to obtain the source code.
If you are not a paid subscriber, you must have signed up for our free trial at http://www.codeoftheweek.com. Our ezine is not an unsolicited message (in other words a spam email). Keep in mind that if you signed up for our free trial you can still receive a total of four issues at no cost to you. After you receive the four issues you will be notified about continuing your subscription.
If you do not wish to continue to receive this ezine, please email us at cancel@codeoftheweek.com
The source code in this issue is designed for Visual Basic 4.0 32-bit and above. It also requires the source code from issue #55 of Code of the Week.
If you have any questions about this issue, please email us at questions@codeoftheweek.com
This issue enhances the code introduced in issue number 54. It shows how to use the Microsoft WININET.DLL to retrieve a file from an FTP server. This version of cFTP provides a couple of events to return the transfer progress. It does not use the Microsoft Internet Controls, so there is one less file you have to worry about including with your application.
This class allows you to download a file from an FTP server very easily. We will be enhancing this class in the future with the ability to upload a file. If you have specific requests, please get them to us as soon as possible at requests@codeoftheweek.com
Basically to use this class you need to set a few properties and call one method.
Public ServerName As String Public SourceFilename As String Public DestinationFilename As String Public BinaryMode As Boolean Public BufferSize As Long Public ProxyServer As String
Public Sub DownloadWithStatus()
This is the method that actually connects to the server, changes to the appropriate directory and downloads a file. It will raise some errors if necessary, such as if the server can not be connected to or the file can not be found.
Public Event TransferProgress(lBytesRead As Long, _ curTotalBytes As Currency, _ curFileSize As Currency) Public Event TransferComplete(curTotalBytes As Currency)
We use Currency variables since they are larger integers (sort of) and allows us to accurately show file sizes and transfer bytes greater than what a Long can contain (about 2 gigabytes). You will probably never FTP a 2 gigabyte file, but if you do this class will handle it correctly.
The TransferProgress event is fired periodically as the file is being transferred. It passes the number of bytes read in the last chunk of data (this will usually equal the BufferSize property), the number of bytes read so far, and the total bytes in the file being transferred (-1 if it was not able to determine that information). It provides enough information to show a progress bar or status information to the end user.
When the transfer is completed the TransferComplete event will be fired with the total number of bytes transferred as its sole parameter.
This example assumes you pasted this into a form that contains the following controls: txtServerName, txtSourceFile, txtDestFile as TextBox; optMode(0) and optMode(1) for selecting ASCII transfer or Binary Transfer as Option buttons, bar as ProgressBar, and lblStatus as Label. This sample will download the file entered in txtSourceFile from txtServerName and place it into txtDestFile. It will update a progress bar and a status label with the transfer progress.
This sample uses the SmartNumberFormat routine found in issue number 52 of Code of the Week.
Option Explicit Dim WithEvents oFTP As cFTP ' Need to declare this WithEvents so we get notified of events. Private Sub oFTP_TransferComplete(curTotalBytes As Currency) lblStatus.Caption = "Transfer completed. Transferred " & SmartNumberFormat(CDbl(curTotalBytes), fsd_Bytes) & " bytes" End Sub Private Sub oFTP_TransferProgress(lBytesRead As Long, _ curTotalBytes As Currency, _ curFileSize As Currency) If curFileSize <> -1 Then bar.Min = 0 bar.Max = curFileSize bar.Value = curTotalBytes lblStatus = SmartNumberFormat(CDbl(curTotalBytes)) & " transferred so far of " & SmartNumberFormat(CDbl(curFileSize)) Else lblStatus = curTotalBytes End If lblStatus.Refresh End Sub Private Sub cmdDownload_Click() On Error GoTo Handler ' created this way since we use the WithEvents keyword Set oFTP = New cFTP oFTP.ServerName = txtServerName oFTP.SourceFilename = txtSourceFile oFTP.DestinationFilename = txtDestFile oFTP.BinaryMode = optMode(1).Value oFTP.DownloadWithStatus Exit Sub Handler: MsgBox Err.Description End Sub
To see the source code for this issue you must be a subscriber to Code of the Week. If you are a subscriber the source code is available at the following address: http://www.codeoftheweek.com/membersonly/bi/0056.html
If you are interested in advertising in COTW please email us at sponsor@codeoftheweek.com Our rates are VERY reasonable, actually they are almost FREE. We reach over five thousand Visual Basic developers each week.
If you have any suggestions for topics you would like to see covered or questions about this issue, please email them to info@codeoftheweek.com or use online feedback form at http://www.codeoftheweek.com/feedback.html.
If you have any source code you would like to submit for possible inclusion in COTW, please fill out our online submission form at http://www.codeoftheweek.com/submission.html.
Thank you for trying Code of the Week for Visual Basic.
Your free trial expires after you receive your fourth issue. If you want to continue to receive Code of the Week you can get 52 issues of COTW for only $19.95. This is a full year of Visual Basic source code and information to help with all your development. So don't wait, subscribe now! The quickest way to subscribe is to jump to our online order form at http://www.codeoftheweek.com/order.html