FluentFTP is a fully managed FTP and FTPS library for .NET & .NET Standard, optimized for speed. It provides extensive FTP commands, File uploads/downloads, SSL/TLS connections, Automatic directory listing parsing, File hashing/checksums, File permissions/CHMOD, FTP proxies, FXP transfers, UTF-8 support, Async/await support, Powershell support and more.
It is written entirely in C#, with no external dependencies. FluentFTP is released under the permissive MIT License, so it can be used in both proprietary and free/open source applications.
- Full support for FTP, FXP, FTPS (FTP over SSL), FTPS with client certificates and FTPS with CCC (for FTP firewalls)
- File management:
- File and directory listing for all major server types (Unix, Windows/IIS, Azure, Pure-FTPd, ProFTPD, Vax, VMS, OpenVMS, Tandem, HP NonStop Guardian, IBM z/OS and OS/400, Windows CE, Serv-U, etc)
- Fully recursive directory listing and directory deletion (manual recursion and server-side recursion)
- Easily upload and download a file from the server with progress tracking
- Easily upload and download a directory from the server with easy synchronization modes
- Easily transfer a file or folder directly from one server to another using the FXP protocol
- Conditionally transfer files using rule based whitelisting and blacklisting
- Automatically verify the hash of a file & retry transfer if hash mismatches
- Configurable error handling (ignore/abort/throw) for multi-file transfers
- Easily read and write file data from the server using standard streams
- Create, append, read, write, rename, move and delete files and folders
- Recursively deletes folders and all its contents
- Get file/folder info (exists, size, security flags, modified date/time)
- Get and set file permissions (owner, group, other)
- Absolute or relative paths (relative to the "working directory")
- Compare a local file against a remote file using the hash/checksum (MD5, CRC32, SHA-1, SHA-256, SHA-512)
- Dereference of symbolic links to calculate the linked file/folder
- Throttling of uploads and downloads with configurable speed limit
- FTP protocol:
- Automatic FTP/FTPS connection negotiation and detection of working connection settings
- Automatic detection of the FTP server software and its capabilities
- Extensive support for FTP commands, including some server-specific commands
- Easily send server-specific FTP commands using the
Execute()
method - Explicit and Implicit SSL connections are supported for the control and data connections using .NET's
SslStream
- Passive and active data connections (PASV, EPSV, PORT and EPRT)
- Supports Unix CHMOD, PRET, ProFTPD's SITE MKDIR and RMDIR commands, Serv-U's RMDA command
- Supports Realm and directory navigation for IBM z/OS and OS/400
- Supports all types of FTP Proxies (HTTP 1.1, SOCKS5, SOCKS4, SOCKS4a, User@Host, BlueCoat)
- FTP command logging using
TraceListeners
(passwords omitted) to trace or log output to a file - SFTP is not supported as it is FTP over SSH, a completely different protocol (use SSH.NET for that)
- Asynchronous support:
- Synchronous and asynchronous methods using
async
/await
for all operations - Asynchronous support for the
IAsyncEnumerable
pattern forGetListing
methods (seeGetListingAsyncEnumerable
) - All asynchronous methods can be cancelled midway by passing a
CancellationToken
- All asynchronous methods honor the
ReadTimeout
and automatically cancel themselves if timed out - Improves thread safety by cloning the FTP control connection for file transfers (optional)
- Implements its own internal locking in an effort to keep transactions synchronized
- Synchronous and asynchronous methods using
- Extensible:
- Easily add support for custom non-standard FTP servers (see the Custom Servers page)
- Easily add support for more file or directory filtering rules (simply extend
FtpRule
) - Easily add support for more proxy types (simply extend
FtpClientProxy
) - Easily add unsupported directory listing parsers (see the
CustomParser
example) - Easily add custom logging/tracing functionality using
FtpTrace.AddListener
- Easily add your own Powershell commands by extending the scripts in
FluentFTP.ps1
Stable binaries are released on NuGet, and contain everything you need to use FTP/FTPS in your .Net/CLR application. For usage see the Quick Start Example and the Documentation wiki.
- Nuget (latest)
- Release Notes (features and fixes per release)
FluentFTP works on .NET and .NET Standard/.NET Core.
Platform | Binaries Folder |
---|---|
.NET 2.0 | net20 |
.NET 3.5 | net35 |
.NET 4.0 | net40 |
.NET 4.5 | net45 |
.NET 5.0 | net50 |
.NET 6.0 | net60 |
.NET Standard 1.4 | netstandard1.4 |
.NET Standard 1.6 | netstandard1.6 |
.NET Standard 2.0 | netstandard2.0 |
.NET Standard 2.1 | netstandard2.1 |
FluentFTP is also supported on these platforms: (via .NET Standard)
- Mono 4.6
- Xamarin.iOS 10.0
- Xamarin.Android 10.0
- Universal Windows Platform 10.0
Binaries for all platforms are built from a single Visual Studio 2019 Project. You will need VS 2019 to build or contribute to FluentFTP.
To get started, check out the Quick start example in C#.
We also have extensive examples for all methods in C# and VB.NET.
Check the Wiki.
If FluentFTP helped you or your organization, consider sponsoring the project by donating a small amount per month. Even $20 goes a long way! Everything I receive goes into household expenses and paying the bills.
I have been a freelancer for more than a decade, and your contributions go towards supporting my work and my family. I only recently started asking for donations to fund the time I spend on these open source projects.
Special thanks to these awesome people who helped create FluentFTP!
FluentFTP has received free software from these generous organizations:
JetBrains provides cutting-edge IDE and developer productivity tools. | Balsamiq provides rapid and effective wireframing and UI design tools. | YourKit provides a market-leading intelligent Java Profiler and .NET Profiler. |