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 and directory listing for all major server types (Unix, Windows/IIS, Azure, Pure-FTPd, ProFTPD, Vax, VMS, OpenVMS, Tandem, HP NonStop Guardian, IBM OS/400, AS400, 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
- Synchronous and asynchronous methods using
await for all operations
- Asynchronous methods for .NET 4.0 and below using
IAsyncResult pattern (Begin*/End*)
- All asynchronous methods can be cancelled midway by passing a
- 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
- 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
- Easily add support for more proxy types (simply extend
- Easily add unsupported directory listing parsers (see the
- Easily add custom logging/tracing functionality using
- Easily add your own Powershell commands by extending the scripts in
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.
FluentFTP works on .NET and .NET Standard/.NET Core.
|.NET Standard 1.4
|.NET Standard 1.6
|.NET Standard 2.0
|.NET Standard 2.1
FluentFTP is also supported on these platforms: (via .NET Standard)
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.
Documentation and FAQs
Check the Wiki.
Special thanks to these awesome people who helped create FluentFTP!
FluentFTP is supported by 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.