Click here to Skip to main content
11,802,442 members (71,426 online)
Click here to Skip to main content

FTP Component in C#, for .NET

, 29 May 2002 269.3K 3.1K 99
Rate this:
Please Sign up or sign in to vote.
An FTP component and sample FTP client, in C#.


For my first experience writing a C# component I decided to implement an FTP Component. This is the sample code to use the component. The component code is not really guaranteed to work fine in this state, but I thought that it might be of some interest and that feedback will help to improve or correct features.

Simply add the component to the ToolBox (Using customize Toolbox) and put it on your form. The code project contains a simple FTP Client. You may have to change FTPCom Reference in TestFTPCom project to test the sample. Remove the old reference and Add Reference to FtpCom.DLL

Sample Code

Connect to the FTP Server

ftpc.Username = EFUsername.Text;
ftpc.Password = EFPassword.Text;

ftpc.Hostname = CBFTPServer.Text;

Logging in to the server

When the connection is completed, the object receives the event Connected, you can then send the Login Command.

private void ftpc_Connected(object sender, FTPCom.FTPEventArgs e)

The event Logged is sent after successful connection

private void ftpc_Logged(object sender, FTPCom.FTPEventArgs e)

Getting a directory listing

The DirCompleted event is received when Dir command is completed FileCount contains the number of files, use IsFolder to find if File is a folder. GetFileName and GetFileSize return the name and the size of the files

Note : File Collection is not implemented in this version as it should be!

private void ftpc_DirCompleted(object sender, FTPCom.FTPEventArgs e)
    int i = 0;
    int idimage = 0;
    string msg;

    msg = "Transfered " + e.TotalBytes.ToString() + " bytes in " + 
          ((float)e.TimeElapsed / 1000).ToString() + " seconds" + CRLF; 
    TextLog.SelectionColor = Color.Black;


    ListViewItem lvItem = new ListViewItem("..");

    for (i = 0; i < ftpc.FileCount; i++)
        if (ftpc.IsFolder(i))
            string[] items = new String[2];
            items[0] = ftpc.GetFileName(i);
            items[1] = ftpc.GetFileSize(i).ToString();
            ImgListServerSmall.Images.Add (m_IconFolder);
            ServerView.Items.Add(new ListViewItem(items, idimage++));
    for (i = 0; i < ftpc.FileCount; i++)
        if (!ftpc.IsFolder(i))
            string[] items = new String[2];
            items[0] = ftpc.GetFileName(i);
            items[1] = ftpc.GetFileSize(i).ToString();
            ImgListServerSmall.Images.Add (ExtractIcon.GetIcon(items[0], false));
            ServerView.Items.Add(new ListViewItem(items, idimage++));
    this.Cursor = Cursors.Default;

Downloading a file

File Download on Local View drag drop

private void ServerView_MouseMove(object sender, 
                                  System.Windows.Forms.MouseEventArgs e)
    if (e.Button != 0)
        string msg = "";

        for (int i = 0; i < ServerView.SelectedItems.Count; i++)
            msg += ServerView.SelectedItems[i].Text + "\n";

        ServerView.DoDragDrop(msg, DragDropEffects.Copy | DragDropEffects.Move);

private void LocalView_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)
    if (e.Data.GetDataPresent(DataFormats.Text)) 
        e.Effect = DragDropEffects.Copy;
        e.Effect = DragDropEffects.None;

private void LocalView_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
    string msg = e.Data.GetData(DataFormats.Text).ToString();

    string[] filename = msg.Split(new char[] { '\n' });
    foreach (string sfile in filename)

When downloading a file is complete the FileDownloadCompleted event is fired

private void ftpc_FileDownloadCompleted(object sender, FTPCom.FTPEventArgs e)
    string msg = "Transfered " + e.TotalBytes.ToString() + " bytes in " + 
                 ((float)e.TimeElapsed / 1000).ToString() + " seconds" + CRLF; 
    TextLog.SelectionColor = Color.Black;

Deleting selected files

for (int i = 0; i < ServerView.SelectedItems.Count; i++)
    ftpc.Delete (ServerView.SelectedItems[i].Text);

Rename a file

private void ServerView_AfterLabelEdit(object sender, 
                         System.Windows.Forms.LabelEditEventArgs e)
    if (e.Label != null)
        this.Cursor = Cursors.WaitCursor;

        string newfilename = e.Label;
        if (m_previousfilename == "New Folder")
            ftpc.Rename(m_previousfilename, newfilename);

Close the connection


Hope this help. Any comments are welcome.


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

No Biography provided

You may also be interested in...

Comments and Discussions

GeneralFTP Commponent Pin
cndy1985010619-Apr-09 23:41
membercndy1985010619-Apr-09 23:41 
GeneralRe: FTP Commponent Pin
cwvdavid26-Sep-09 8:38
membercwvdavid26-Sep-09 8:38 
GeneralCool Pin
Axonn Echysttas12-Mar-09 13:50
memberAxonn Echysttas12-Mar-09 13:50 
GeneralA comfortable FTP class in .NET Pin
Elmue27-Aug-08 12:18
memberElmue27-Aug-08 12:18 
Questionftp folder download Pin
Member 47115579-Apr-08 23:13
memberMember 47115579-Apr-08 23:13 
GeneralNot listing the remote directory contents completely Pin
MathachanJK28-Nov-06 19:10
memberMathachanJK28-Nov-06 19:10 
QuestionRe: Not listing the remote directory contents completely Pin
Member 47115579-Apr-08 23:30
memberMember 47115579-Apr-08 23:30 
QuestionDownloading FTP Folder [modified] Pin
shafqatmasood9-Aug-06 19:37
membershafqatmasood9-Aug-06 19:37 
AnswerRe: Downloading FTP Folder Pin
shafqatmasood10-Aug-06 22:19
membershafqatmasood10-Aug-06 22:19 
QuestionRe: Downloading FTP Folder Pin
Member 47115579-Apr-08 22:56
memberMember 47115579-Apr-08 22:56 
raznalove1-Jul-06 2:37
memberraznalove1-Jul-06 2:37 
GeneralCode does not work Pin
mbde23-Mar-06 2:32
membermbde23-Mar-06 2:32 
GeneralFTP events in c# Pin
CRASH726-Dec-05 0:04
memberCRASH726-Dec-05 0:04 
Generalnot all data Pin
drxy13-Feb-05 20:30
memberdrxy13-Feb-05 20:30 
GeneralJaimon's FTP Client library may help Pin
Casp14-Dec-04 5:54
memberCasp14-Dec-04 5:54 
GeneralNon-Compatibility bug with Sun Pin
Anonymous24-Nov-04 3:09
sussAnonymous24-Nov-04 3:09 
GeneralRe: Non-Compatibility bug with Sun Pin
mrBussy1-Aug-05 4:44
membermrBussy1-Aug-05 4:44 
GeneralAnother free, open-source .NET FTP component Pin
Hans Andersen10-Nov-04 12:15
sussHans Andersen10-Nov-04 12:15 
GeneralRe: Another free, open-source .NET FTP component Pin
zini3-Mar-06 10:43
memberzini3-Mar-06 10:43 
GeneralRe: Another free, open-source .NET FTP component [modified] Pin
h_c_a_andersen12-Dec-06 16:45
memberh_c_a_andersen12-Dec-06 16:45 
edtFTPnet is open source and free, and will always remain so. It's released under LGPL. Here is a download link that includes both source and binaries.

You may have gotten edtFTPnet confused with one of the commercial versions (i.e. edtFTPnet/Express or edtFTPnet/PRO). These add some features to edtFTPnet that are useful for some commercial applications, but the free version is a full-featured FTP client library that is used (free of charge) by tens of thousands of developers.

I realize that simply flogging a commercial product in a forum such as this is unethical and I would not do this. However, edtFTPnet really is free and open source, so I believe that it is acceptable and (hopefully) useful for readers of the forum.

- Hans

GeneralWrong in the GetIcon(string strPath, bool bSmall) method Pin
ande_vega20-Oct-04 12:01
memberande_vega20-Oct-04 12:01 
GeneralTwo question Pin
CliniC16-Aug-04 2:19
memberCliniC16-Aug-04 2:19 
GeneralInput fail -&gt; freeze Pin
CliniC5-Jun-04 22:49
memberCliniC5-Jun-04 22:49 
QuestionHow to use it in background? Pin
Jackfan23-Mar-04 21:45
memberJackfan23-Mar-04 21:45 
AnswerRe: How to use it in background? Pin
byshome15-Sep-05 20:30
memberbyshome15-Sep-05 20:30 
GeneralAbout command. Pin
colormex23-Jan-04 15:42
membercolormex23-Jan-04 15:42 
Generalredirect Pin
rawad 200419-Jan-04 8:24
memberrawad 200419-Jan-04 8:24 
GeneralFTP Component Pin
rawad 200412-Jan-04 3:08
memberrawad 200412-Jan-04 3:08 
Anonymous27-May-03 5:24
sussAnonymous27-May-03 5:24 
drwindows19-Nov-03 23:35
memberdrwindows19-Nov-03 23:35 
Jerome Lacaille20-Nov-03 3:13
memberJerome Lacaille20-Nov-03 3:13 
GeneralJerome,I want to tell you....... Pin
lanpa00718-Dec-03 21:08
memberlanpa00718-Dec-03 21:08 
B!GFooT13-Aug-07 2:28
memberB!GFooT13-Aug-07 2:28 
Generalabout DirChange() Pin
weiweiwei12-Apr-03 20:22
memberweiweiwei12-Apr-03 20:22 
GeneralRe: about DirChange() Pin
scsy15-Apr-03 7:04
sussscsy15-Apr-03 7:04 
GeneralRe: about DirChange() Pin
weiweiwei15-Apr-03 7:50
memberweiweiwei15-Apr-03 7:50 
GeneralProblem with exe Pin
sorry273-Feb-03 4:22
membersorry273-Feb-03 4:22 
GeneralRe: Problem with exe Pin
Anonymous24-Feb-03 10:03
sussAnonymous24-Feb-03 10:03 
GeneralCode does not seem to work on every ftpserver Pin
normann30-Jan-03 11:43
membernormann30-Jan-03 11:43 
GeneralRe: Code does not seem to work on every ftpserver Pin
Anonymous7-Apr-03 0:36
sussAnonymous7-Apr-03 0:36 
GeneralCurrent directory Pin
ThiefMaster26-Jan-03 2:03
memberThiefMaster26-Jan-03 2:03 
GeneralRe: Current directory Pin
Tuliplanet2-Jun-03 17:51
memberTuliplanet2-Jun-03 17:51 
GeneralFileDownloadCompleted does not report filename Pin
Kelvin Foo Chuan Lyi12-Dec-02 13:47
memberKelvin Foo Chuan Lyi12-Dec-02 13:47 
GeneralFileDownloadCompleted does not report filename Pin
Anonymous12-Dec-02 13:46
sussAnonymous12-Dec-02 13:46 
GeneralFTP Size Limitation Pin
godlikemouse6-Dec-02 7:54
sussgodlikemouse6-Dec-02 7:54 
GeneralRe: FTP Size Limitation Pin
godlikemouse6-Dec-02 11:35
sussgodlikemouse6-Dec-02 11:35 
GeneralFileCount not correct Pin
hfwangfeng18-Nov-02 20:31
memberhfwangfeng18-Nov-02 20:31 
GeneralRe: FileCount not correct Pin
godlikemouse6-Dec-02 7:55
membergodlikemouse6-Dec-02 7:55 
Questionabout the delay of "PASV" command? Pin
daemonftp16-Nov-02 0:16
memberdaemonftp16-Nov-02 0:16 
GeneralFTPC vs CPU Load Pin
Anonymous30-Oct-02 22:50
sussAnonymous30-Oct-02 22:50 

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

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

| Advertise | Privacy | Terms of Use | Mobile
Web02 | 2.8.151002.1 | Last Updated 30 May 2002
Article Copyright 2002 by Jerome Lacaille
Everything else Copyright © CodeProject, 1999-2015
Layout: fixed | fluid