Click here to Skip to main content
Click here to Skip to main content

FTP Wanderer - FTP Client using WININET

By , 30 Jul 2002
 

Sample Image

Description

This article presents a fully functional implementation of a FTP client. FTP Wanderer is a multithreaded FTP client with the look-and-feel of Windows Explorer, and makes moving files between the Internet and your computer as simple as local file manipulation. This application uses WININET API's to handle the FTP protocol, and while it's not the most elegant way to connect to a FTP server it does the job pretty well.

Features list

  • All file transfer requests are handled in the background, so you don't have to wait while files copy to continue browsing the current server. You can even connect to a different server, while file transfers on another server are still in progress.
  • The Transfer Manager shows all file transfers currently in progress plus the ones that are in the queue. You can configure how many transfers are processed simultaneously, so you don't run out of resources.
  • FTP Wanderer uses the Windows 9x/NT/XP style list boxes for displaying the contents of remote servers. With all familiar system icons and context menus.
  • You can specify the number of times it should try to connect, and the time delay between connection attempts.
  • Full Drag and Drop support. Simply drag one or more files or even complete folders onto FTP Wanderer's file view area to transfer them to the location of the server that is currently connected.
  • Easily configure FTP site settings, like username, password, port, initial remote folder, number of retries and default download folder.

Here's a brief description of some of the important classes of the application:

CMainFrame

CMainFrame contains most of the code for managing the FTP connection. It takes care of connecting to the server; initiate up/downloads and handling other FTP related actions.

CFTPListView

This is just a CListView derived class that takes care of displaying the files and enabling you to sort them. When the application is busy downloading or sorting a directory listing it can display an animation, just like explorer does.

CConnectDlg

This class (= Site Manager) enables the user to manage FTP sites. You can add/change and delete sites and configure properties such as hostname, port, username and password. The settings of each site are save to disk using serializing.

CTransferManagerDlg

CTransferManagerDlg (= Transfer manager) takes care of queuing the file transfers. It shows all file transfers currently in progress plus the ones that are in the queue. You can configure how many transfers are processed simultaneously, so you don't run out of resources. Each up/download in handled in a separate thread by initiating a CDownloadThread or CUploadThread thread.

CDownloadThread

Each download is handled in the background using a separate thread. CDownloadThread creates a new connection with the FTP server and displays a progress dialog that tells you the status of the file transfer. When the download is completed (or aborted) it notifies the transfer manager so the UI can be updated.

CUploadThread

Each upload is handled in the background using a separate thread. CUploadThread creates a new connection with the FTP server and displays a progress dialog that tells you the status of the file transfer. When the upload is completed (or aborted) it notifies the transfer manager so the UI can be updated.

To do list:

While this application has most of the features you might expect in a FTP client, there are a few things left to do:

  • Drag and drop support out of the file view area to Explorer. I think this one is not that easy, because this would probably 'block' explorer until the file transfer is completed (any suggestions?).
  • Progress indication in the transfer manager. This is not really that hard to do, so this will probably be in the next release.
  • Better asynchrony handling of getting directory listing. The UI now does not respond when downloading a huge directory listing.

Contacting the Author

Please send any comments or bug reports to me via email. For any updates to this article, check my site here.

Revision history

  • 31st July 2002 - Initial revision.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

About the Author

Pablo van der Meer
Web Developer
Netherlands Netherlands
No Biography provided

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
Hint: For improved responsiveness ensure Javascript is enabled and choose 'Normal' from the Layout dropdown and hit 'Update'.
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
Questionbug: assertion occursmemberbln13fb4-Mar-13 23:07 
GeneralMy vote of 5memberytfrdfiw31-Oct-12 21:51 
Questionhow to debug and compile in vs2008memberytfrdfiw31-Oct-12 21:51 
Generalc# or VBmemberMember 397598029-Oct-09 7:16 
Is this project in c# o in ASP.NET or in VB.NET??? It will be fantastic
Questionhow to mark when a download is finishedmemberflyras22-Aug-09 23:01 
GeneralA comfortable FTP class in .NETmemberElmue27-Aug-08 12:15 
QuestionQuestionmemberAlireza_136210-Feb-08 21:44 
QuestionCInternetSession Setting problemmemberCem Usta17-Aug-07 2:20 
Questiontwo errors when i compline the source use visual studio 2005?memberxinmans13-Apr-07 0:02 
GeneralGreat Job !!! Hats offmembersridharraov22-Feb-07 4:09 
GeneralDrag and Drop Problemmembercodepanter25-Sep-06 23:35 
GeneralThis might be the greatest article on this sitememberProgramm3r22-Aug-06 20:39 
Generalwow...memberjimbo_azim12-Jul-06 22:10 
QuestionWinInet FTP - how to dump each conversation ?memberrrrado30-Nov-05 4:21 
QuestionHow to implement security in FTPmemberrm_pkt4-Oct-05 3:08 
QuestionAPPEND feature for FTP?memberLowell20-Sep-05 9:35 
AnswerRe: APPEND feature for FTP?memberPablo van der Meer20-Sep-05 9:38 
GeneralRe: APPEND feature for FTP?memberLowell21-Sep-05 8:37 
GeneralRe: APPEND feature for FTP?memberPablo van der Meer21-Sep-05 9:27 
GeneralThere are two bugs with your Ftp Wanderermembersiduizhangjian@hotmail.com26-May-05 14:52 
GeneralRe: There are two bugs with your Ftp WanderermemberPablo van der Meer26-May-05 19:44 
GeneralRe: There are two bugs with your Ftp WanderermemberTuPacMansur8-Jan-06 8:54 
GeneralResourcesmemberbluecoolz23-Nov-04 20:23 
Generalproxymembersway19-Nov-04 20:38 
GeneralRe: proxysussAnonymous19-Nov-04 20:52 
GeneralThe program will hnd after uploading under WINDOWS 98memberVCPP621-Aug-04 2:26 
GeneralRe: The program will hnd after uploading under WINDOWS 98memberPablo van der Meer21-Aug-04 2:48 
GeneralMoving file from one folder to another on a FTP server remotlymemberusmanm@vonemm.com23-Jul-04 0:49 
GeneralI'm Very ImpressedmemberPeter Coppinger1-May-04 2:12 
GeneralRe: I'm Very ImpressedmemberRavi Bhavnani1-May-04 3:48 
GeneralRe: I'm Very ImpressedmemberPablo van der Meer1-May-04 3:57 
QuestionHow to exit ftp immediately?memberwheregone3-Nov-03 17:25 
AnswerRe: How to exit ftp immediately?memberPablo van der Meer3-Nov-03 20:18 
GeneralRe: How to exit ftp immediately?memberwheregone4-Nov-03 1:24 
Generalblocks connection when Ftp-Server disconnectedmemberNielsR17-Oct-03 0:42 
GeneralRe: blocks connection when Ftp-Server disconnectedmemberPablo van der Meer17-Oct-03 0:47 
QuestionBug on CInternetSession::SetOption???membernaghicalin16-Oct-03 11:24 
AnswerRe: Bug on CInternetSession::SetOption???memberNielsR17-Oct-03 0:17 
QuestionBug ?memberrpascal1-Oct-03 20:45 
AnswerRe: Bug ?memberPablovanderMeer1-Oct-03 20:58 
GeneralUpload problemmemberigorss29-Sep-03 3:13 
GeneralFtpCommandmemberNielsR29-Sep-03 1:44 
GeneralRe: FtpCommandmemberPablovanderMeer29-Sep-03 2:18 
GeneralRe:FTP Connection not workingmembergirishnadig18-Sep-03 6:44 
GeneralDear PablomemberJerry Evans21-Aug-03 22:34 
GeneralResolving symbolic linksmemberJohn Simmons / outlaw programmer26-Mar-03 10:09 
QuestionResume transmission at the point of interruption?membernothingremained20-Oct-02 2:42 
AnswerRe: Resume transmission at the point of interruption?memberMarcelo N. Magri28-Jan-03 4:58 
AnswerRe: Resume transmission at the point of interruption?memberPablovanderMeer26-Mar-03 10:30 
AnswerRe: Resume transmission at the point of interruption?memberNarendra Chandel17-Jun-03 11:35 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Permalink | Advertise | Privacy | Mobile
Web01 | 2.6.130619.1 | Last Updated 31 Jul 2002
Article Copyright 2002 by Pablo van der Meer
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid