Rating:        Based on 11 ratings
Reviewed:  6 reviews
Downloads: 26518
Change Set: 630f66e9436a
Released: Jun 17, 2014
Updated: Mar 29, 2016 by jptrosclair
Dev status: Stable Help Icon

Recommended Download

Application System.Net.FtpClient 15.12.09
application, 220K, uploaded Dec 10, 2015 - 5605 downloads

Other Available Downloads

Application System.Net.FtpClient 13.10.04
application, 2945K, uploaded Oct 4, 2013 - 2901 downloads
Application System.Net.FtpClient 13.11.12
application, 2951K, uploaded Nov 12, 2013 - 1512 downloads
Application System.Net.FtpClient 14.01.07
application, 2976K, uploaded Jan 7, 2014 - 2303 downloads
Application System.Net.FtpClient 14.03.28
application, 3051K, uploaded Mar 28, 2014 - 1752 downloads
Application System.Net.FtpClient. 14.06.04
application, 3411K, uploaded Jun 4, 2014 - 425 downloads
Application System.Net.FtpClient 14.06.17
application, 3410K, uploaded Jun 17, 2014 - 12020 downloads

Release Notes


I'd like to pass this project off to a new maintainer. There are outstanding issues however I don't have the time I once did to stay on top of development and bug fixes. If you're interested in taking over reach out using the contact form.

System.Net.FtpClient is now available via nuget.

Be sure to read the Documentation page for important information about using this library. It's a quick read and will be worth its weight in gold with regards to effectively using this project in your own!

For developers already using this project, check the commit comments for an update on what's changed and fixed.


Merged several pull requests, see commit notes. One of these was a performance enhancement for parsing file listings. This release was built with Mono.


Added exception handling in key places to improve reliability by avoiding uncatchable exceptions while cleaning up from a previous exception.


Added new IsDisposed property. Connect() method checks and throws ObjectDisposedException if true.

Added locking to FtpClient.Dispose() to allow a transaction to finish before cleanup.


Merged Daniel Arnold's fix in FtpSocketStream.

Added new UngracefullDisconnect property that allows you to close the control connection without sending QUIT to the server. Use this if the control connection socket is closed/reset by the server pre-maturely when calling Disconnect().

Added new ErrorMessage property to FtpReply that concatenates informational messages along with the final response message together in an effort to provide more meaningful error messages in cases such as this IIS reply which previously would trigger an FtpCommandException with the Message "End"; not helpful.

550-Access is denied.
Win32 Error: Access is denied.
Error details: File system denied the access.
550 End

The above error would now be formatted as so:

Access is denied; Win32 Error: Access is denied.; Error details: File system denied the access.; End

Which is immensly more helpful than just "End".
Fixed issues where FtpListItem parsers collection was not initialized until first directory listing. This prevented people from adding their own parsers ahead of time.


Addressed issue with sequencing or PBSZ/PROT commands for data channels, they are now executed after the user has been authenticated instead of before.


Readjusted path cleanup code to remove wild card/glob patterns from the path name when passed to GetListing()

Improved globbing/wildcard cleanup. If the last segment of the path in a file listing contains a glob/wildcard pattern that segment is excluded from the full path in the FtpListItem objects returned. Globs anywhere else in the path are ignored, as there is no straight forward way to expand the full path correctly.

Added comments to async examples to point out potential problem with using statement in typical use cases for the Begin* methods. Added disposed check internally when calling End* methods to see if the connection object has been disposed yet. If it has and you call an End* method, an ObjectDisposed() exception is thrown. This scenario signifies a programming error.

Merged Yuriy Gromchenko changes to address null reference exception in GetListing() method.


Serveral bug fixes and reliability improvements. See the commit notes for more information.


Several bug fixes and a few enhancements to logging. See commit notes for more details.


Fixed UTF8 problem with cloned connections that affected some servers that don't enable UTF8 by default when supported.

Reviews for this release

Great library and well documented! Making a connection to an FTP server is usually a bit slower than using other ftp clients, but is very easy to use and supports nearly all commands you will need when working with FTPs Recommended
by Kutufluix on May 9, 2013 at 2:58 PM
Good product, easy to use and quick. Saved me a load of time. Thanks.
by david_jacques_001 on Sep 4, 2013 at 7:33 AM
Does what it says on the tin. Developers quick to respond and active on issues. Recommended.
by undefinedfunction on May 1, 2013 at 8:53 PM
A bit buggy, but works with a few tweaks.
by ThomasWilliams on Tue at 2:19 PM
Excellent tool. Made working with ftp from C# a breeze.
by MarkAinsworth on Mar 20 at 8:28 PM
I needed a passive mode ftp client, found this and was up and running in 30 minutes!
by mc349 on Dec 15, 2013 at 8:09 AM