Click here to Skip to main content
13,767,554 members
Click here to Skip to main content
Add your own
alternative version


103 bookmarked
Posted 25 Jun 2008
Licenced CPOL

FTP Client and HttpFileDownloader Components (Controls)

, 25 Jun 2008
Rate this:
Please Sign up or sign in to vote.
FTP client and HttpFileDownloader components (controls).


Once I needed a simple, open source, and robust FTP client to include in my project. To my surprise, I was not able to find one in spite of many FTP clients that were published on various websites including CodeProject. The problem was the quality: the published projects were just demos. There were no quality FTP clients.

According to ratings, the most popular CodeProject FTP client is available here: An FTP client library for .NET 2.0. In spite of numerous fixes, the component did not work as I anticipated. And the major problem is not in the fixes (some of them were quite reasonable) - the problem is in the underlying FtpWebRequest component itself.

The component is designed to operate in stateless mode. One can only guess what the reasons were behind such a “wise” decision. FTP is a connection based protocol, and any attempt to fit a connection based protocol into a connectionless component apparently can not work well, by definition. First, what can we possibly benefit out of relinquishing the control over the connection status? The connection will not go away even if you hide it somewhere - it is the protocol's property, not the component’s. I can only think that the designers of this component intended to keep the component in line with HttpWebRequest. But, the difference is that the HTTP protocol is stateless by nature and FTP is not.

FtpWebRequest problems

So, what is wrong with FtpWebRequest? The main problem is the response time. The connection to the server of any FTP client took about 2.5 seconds. FtpWebRequest consistently showed 13.5 seconds (when connected to the same site). No customer would tolerate an extra 11 seconds delay without reason (440% increase). Apart from that, if you do not explicitly set KeepConnectionAlive to false, the system would not work properly. (It is supposed to be false, by default.)

The solution

Luckily, I found a good solution in the aforementioned article's comments. The solution is edtFTPnet. It is an open source library of the highest quality (believe it or not). The library is designed by Enterprise Distributed Technologies. They also have advanced versions of FTP components (with SSL and other features), but they are not free. The only problem with the open source one is that it lacks multithreading support. But that is not a real problem – a multithreading wrapper can be created for almost anything if you have experience. This component is a multithreading wrapper for edtFTPnet designed as a Windows Forms control, with some minor additions like status bar support and threads handling.

Core features

  • Runs in a separate thread.
  • Ability to cancel the transfer at any time.
  • Progress bar support.
  • Displays estimated time left.
  • Displays transfer speed.

How to use the controls

Copy the root directory (and subdirectories) to any location. Create a new tab in the Visual Studio Toolbox. Register the library with the Visual Studio Toolbox by browsing for FTPLib. You will be able to see the controls on the tab.

Drag the control to your form. Place the progress bar on the form. Select your FtpControl and select your status bar in the ProgrBar control’s properties.

Create a status event by selecting and double clicking StatusUpdateEvent.

The rest is quite clear from the samples.


The second component is a HttpFileDownloader component (control). Both components inherit from the BaseDownloader component.

New version

If a newer version is released, it will be available here.


This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


About the Author

Web Developer
Australia Australia
No Biography provided

You may also be interested in...


Comments and Discussions

NewsMy vote of 5 Pin
Elmue17-Mar-11 16:20
memberElmue17-Mar-11 16:20 
GeneralWindows 7 Pin
vectoraudiouk7-Apr-10 7:50
membervectoraudiouk7-Apr-10 7:50 
GeneralRe: Windows 7 Pin
Mike Russo28-Jun-10 10:09
memberMike Russo28-Jun-10 10:09 
GeneralFtp root folder Pin
SPdo29-Sep-09 20:59
memberSPdo29-Sep-09 20:59 
GeneralRe: Ftp root folder Pin
meocutduoi3-Apr-13 17:30
membermeocutduoi3-Apr-13 17:30 
Generalregistering dll - adding to Toolbox Pin
sanicovan25-May-09 8:02
membersanicovan25-May-09 8:02 
GeneralRe: registering dll - adding to Toolbox Pin
Alex_126-May-09 0:01
memberAlex_126-May-09 0:01 
GeneralRe: registering dll - adding to Toolbox Pin
sanicovan26-May-09 4:05
membersanicovan26-May-09 4:05 
QuestionResuming? Pin
Niklas Henricson6-May-09 4:15
memberNiklas Henricson6-May-09 4:15 
GeneralDownload list of files? [modified] Pin
Amirtich3-May-09 9:37
memberAmirtich3-May-09 9:37 
mnek8421-Apr-09 2:55
membermnek8421-Apr-09 2:55 
GeneralSetLocalFolder not working... Pin
amb980018-Dec-08 4:03
memberamb980018-Dec-08 4:03 
Questionencoding? Pin
ParkInSung1-Dec-08 19:15
memberParkInSung1-Dec-08 19:15 
Hi~ Good prgogram!!
But, How do I take care of the following encoding?

--> Encoding.GetEncoding("ks_c_5601-1987") or Encoding.GetEncoding("euc-kr") ?


GeneralProblem with edtFTPnet Pin
infoss21-Aug-08 22:49
memberinfoss21-Aug-08 22:49 
GeneralGreat project Pin
hardsoft26-Jun-08 13:34
memberhardsoft26-Jun-08 13:34 
GeneralRe: Great project Pin
Alex_126-Jun-08 17:39
memberAlex_126-Jun-08 17:39 
GeneralGood job Pin
bilo8125-Jun-08 23:18
memberbilo8125-Jun-08 23:18 
GeneralRe: Good job Pin
Alex_126-Jun-08 17:52
memberAlex_126-Jun-08 17:52 

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

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Cookies | Terms of Use | Mobile
Web06-2016 | 2.8.181116.1 | Last Updated 25 Jun 2008
Article Copyright 2008 by Alex_1
Everything else Copyright © CodeProject, 1999-2018
Layout: fixed | fluid