Click here to Skip to main content
15,860,844 members
Articles / Programming Languages / C#
Article

FTP Client and HttpFileDownloader Components (Controls)

Rate me:
Please Sign up or sign in to vote.
4.81/5 (15 votes)
25 Jun 2008CPOL3 min read 82.7K   7K   103   18
FTP client and HttpFileDownloader components (controls).

Image 1

Introduction

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.

Image 2

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.

Image 3

The rest is quite clear from the samples.

HttpFileDownloader

Image 4

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.

License

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


Written By
Web Developer
Australia Australia
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
NewsMy vote of 5 Pin
Elmue17-Mar-11 15:20
Elmue17-Mar-11 15:20 
GeneralWindows 7 Pin
vectoraudiouk7-Apr-10 6:50
vectoraudiouk7-Apr-10 6:50 
GeneralRe: Windows 7 Pin
Mike Russo28-Jun-10 9:09
Mike Russo28-Jun-10 9:09 
GeneralFtp root folder Pin
SPdo29-Sep-09 19:59
SPdo29-Sep-09 19:59 
GeneralRe: Ftp root folder Pin
meocutduoi3-Apr-13 16:30
meocutduoi3-Apr-13 16:30 
Generalregistering dll - adding to Toolbox Pin
sanicovan25-May-09 7:02
sanicovan25-May-09 7:02 
GeneralRe: registering dll - adding to Toolbox Pin
Alex_125-May-09 23:01
Alex_125-May-09 23:01 
GeneralRe: registering dll - adding to Toolbox Pin
sanicovan26-May-09 3:05
sanicovan26-May-09 3:05 
QuestionResuming? Pin
User 2575526-May-09 3:15
User 2575526-May-09 3:15 
GeneralDownload list of files? [modified] Pin
Amirtich3-May-09 8:37
Amirtich3-May-09 8:37 
GeneralTHREAD PROBLEM Pin
mnek8421-Apr-09 1:55
mnek8421-Apr-09 1:55 
GeneralSetLocalFolder not working... Pin
amb980018-Dec-08 3:03
amb980018-Dec-08 3:03 
Questionencoding? Pin
ParkInSung1-Dec-08 18:15
ParkInSung1-Dec-08 18:15 
GeneralProblem with edtFTPnet Pin
infoss21-Aug-08 21:49
infoss21-Aug-08 21:49 
GeneralGreat project Pin
hardsoft26-Jun-08 12:34
hardsoft26-Jun-08 12:34 
I not looked at this yet but does it account for proxy servers so you can supply a username, password and proxy server etc?
GeneralRe: Great project Pin
Alex_126-Jun-08 16:39
Alex_126-Jun-08 16:39 
GeneralGood job Pin
bilo8125-Jun-08 22:18
bilo8125-Jun-08 22:18 
GeneralRe: Good job Pin
Alex_126-Jun-08 16:52
Alex_126-Jun-08 16: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.