Releases: robinrodricks/FluentFTP
FluentFTP 20.0.0
Major release with lots of new and exciting features, and numerous fixes by our contributors. Thanks everyone!
20.0.0
- New: FTP Server software detection (PureFTPd, VsFTPd, ProFTPD, FileZilla, OpenVMS, WindowsCE, WuFTPd)
- New: Detect if the FTP server supports recursive file listing (LIST -R) command using whitelist
- New:
GetListing
will manually recurse through directories ifFtpListOption.Recursive
is set and server does not support recursion - New: Added
LastReply
property which returns the lastFtpReply
recieved from the server. - New: Added new upload option
AppendNoCheck
to append to a file on the server without checking if it exists (thanks @everbalovas) - Fix: During upload, respond to any error in 5xx series, not just 550 (thanks @stengnath)
- Fix: Various fixes to
UploadFileAsync
based on fixes already implemented inUploadFile
19.2.4
- Fix:
UploadFilesAsync
witherrorHandling
deletes the entire directory instead of specific files - Fix: Server responds to EPSV with 425 "Data connection failed" but connects with PASV (thanks @ejohnsonTKTNET)
- Fix: Use proper async configuration for .NET Async methods (thanks @ejohnsonTKTNET)
- Fix: Improve implementation of upload and download resuming in Async methods (thanks @ejohnsonTKTNET)
19.2.3
- Fix:
UploadFile()
orUploadFiles()
sometimes fails to create the remote directory if it doesn't exist - Fix:
DownloadDataType
Binary value ignored on ASCII-configured FTP servers - Performance improvement: Added
BufferedStream
betweenSslStream
andNetworkStream
(thanks @Lukazoid) - Fix: When the FTP server sends 550, transfer is received but not confirmed (thanks @stengnath)
- Fix: Make
Dispose
method ofFTPClient
virtual (thanks @martinbu) - Fix:
OpenPassiveDataStream
/Async()
uses the target FTP host instead of the configured proxy (thanks @rmja) - Fix:
FileExists()
for Xlight FTP Server (thanks @oldpepper) - Fix: FTPD "550 No files found" when folder exists but is empty, only in PASV mode (thanks @olivierSOW)
- Fix: Many unexpected EOF for remote file
IOException
on Android (thanks @jersiovic) - Fix: Race condition when
BeginInvoke
calls the callback before theIAsyncResult
is added (thanks @Lukazoid)
19.2.2
- Fix: Prevent socket poll from hammering the server multiple times per second
- Fix: Allow using absolute paths that include drive letters (Windows servers)
- Performance improvement: Only change the FTP data type if different from required type
- Performance improvement: Download all files in EOF mode and skip the file size check, unless download progress is required
- Added all missing async versions of FTP methods to
IFtpClient
- System: Certain core FTP socket handling operations have been changed to improve reliability & performance.
19.1.4
- Fix: Fix hang in TLS activation because no timeout is set on the underlying
NetworkStream
(thanks @iamjay)
19.1.3
- Added async versions of FTP methods to
IFtpClient
(thanks @peterfortuin) - Fix: Fixes when
ActivePorts
is specified in active FTP mode (thanks @ToniMontana) - Fix: Throw
OperationCanceledException
instead ofFtpException
when cancellation is requested (thanks @taoyouh)
19.1.2
- Fix: Add support for checking if file exists on Serv-U FTP Server
- Fix: Make
IFtpClient
inherit fromIDisposable
(thanks @repl-andrew-ovens) - (UWP) Fix: UWP does not allow
File.Exists()
to run in UI thread (thanks @taoyouh)
19.1.1
- Fix: When downloading files in ASCII mode, file length is unreliable therefore we read until EOF
- Fix: When upload/download progress is indeterminate, send -1 instead of NaN or Infinity
- Fix:
NetStream
was not assigned inFtpSocketStream
for .NET Standard in active FTP mode (thanks @ralftar) - Fix:
CurrentDataType
was not set for ASCII transfers inDownloadFileAsync
/UploadFileAsync
(thanks @taoyouh) - Fix: Sometimes
FtpSocketStream
andFtpDataStream
are not disposed inFtpSocketStream.Dispose
(thanks @taoyouh)
19.1.0
- New Progress reporting for
UploadFile
&DownloadFile
methods viaIProgress
- Fix:
Stream.Position
should not be set inUploadFileInternal
unless supported
19.0.0
- New Task-based async methods for .NET Standard and .NET Fx 4.5 (thanks @taoyouh)
- New async methods for
UploadFile
,DownloadFile
,UploadFiles
&DownloadFiles
(thanks @artiomchi) - (UWP) Fix:
FileNotFoundException
with referenceSystem.Console
(thanks @artiomchi) - (.NET core) Fix: Thread suspends when calling
UploadFile
orDownloadFile
(thanks @artiomchi) - (.NET core) Fix: File download hangs inconsistently when reading data from stream (thanks @artiomchi, @bgroenks96)
- (.NET core) Fix: Stream does not dispose due to wrong handling of closing/disposing (thanks @artiomchi)
- Fix: File upload EOS bug when calling
Stream.Read
(thanks @bgroenks96, @artiomchi, @taoyouh) - Fix:
DownloadFileInternal
not recognizing the download data type
withEnableThreadSafeConnections
(thanks @bgroenks96) - (Backend) Migrate to a single VS 2017 solution for all frameworks (thanks @artiomchi)
- (Backend) Continuous Integration using AppVeyor (thanks @artiomchi)
18.0.1
- Add
IFtpClient
interface to build unit tests upon mainFtpClient
class (thanks Kris0) - Disposing
FtpDataStream
reads server reply and closes the underlying stream (thanks Lukazoid)
18.0.0
- New
SetModifiedTime
API to change modified date of a server file in local timezone/UTC - Add type argument to
GetModifiedTime
, allowing for getting dates in UTC/Local timezone - Breaking changes to Async API of
GetModifiedTime
(addition of type argument) GetModifiedTime
andSetModifiedTime
now honor theTimeOffset
property inFtpClient
- Add
checkIfFileExists
toOpenRead
,OpenAppend
andOpenWrite
to skipGetFileSize
check - Fix issue where
InnerException
is null during a file transfer (upload/download) - Improve performance of typical uploads/downloads by skipping the extra file exists check
17.6.1
- Fix for
CreateDirectory
andDirectoryExists
to allow null/blank input path values - Fix for
GetFtpDirectoryName
to return correct parent folder of simple folder paths (thanks ww898)
17.6.0
- Add argument validation for missing/blank arguments in :
Upload, Download, UploadFile(s), DownloadFile(s), GetObjectInfo, DeleteFile, DeleteDirectory, FileExists, DirectoryExists, CreateDirectory, Rename, MoveFile, MoveDirectory, SetFilePermissions, Chmod, GetFilePermissions, GetChmod, GetFileSize, GetModifiedTime, VerifyTransfer, OpenRead, OpenWrite, OpenAppend
- Disable all async methods on .NET core due to persistant
PlatformUnsupported
exception (if you need async you are free to contribute a non-blocking version of the methods)
17.5.9
- Increase performance of
GetListing
by reading multiple lines at once (BulkListing property, thanks sierrodc)
17.5.8
- Add support for parsing AS400 listings inside a file (5 fields) (thanks rharrisxtheta)
- Retry interpreting file listings after encountered invalid date format (thanks rharrisxtheta)
- Always switch into binary mode when running SIZE command (thanks rharrisxtheta)
17.5.7
- Honor
UploadDataType
andDownloadDataType
in all sync/async cases (thanks rharrisxtheta) - Force file transfers in BINARY mode for known 0 byte files (thanks rharrisxtheta)
- Allow file transfers in ASCII mode if the server doesn't support the SIZE command (thanks rharrisxtheta)
17.5.6
- Fix
NullReferenceException
when arguments are null duringFtpTrace.WriteFunc
17.5.5
- Remove internal locking for .NET Standard 1.4 version since unsupported on UWP
17.5.4
- Remove dependency on
System.Threading.Thread
for .NET Standard 1.4 version (for UWP)
17.5.3
- Allow transferring files in ASCII/Binary mode with the high-level API (UploadDataType, DownloadDataType)
17.5.2
- Add support for .NET 3.5 and .NET Standard 1.4 (supports Universal Windows Platform 10.0)
17.5.1
- Add
FtpTrace.LogToConsole
andLogToFile
to control logging in .NET core version
17.5.0
- Add
PlainTextEncryption
API to support FTPS servers and plain-text FTP firewalls (CCC command) - FluentFTP now uses unsafe code to support the CCC command (inside
FtpSslStream
) - If you need a "non unsafe" version of the library please add an issue
17.4.4
- Add logging for high-level function calls to improve remote debugging (
FtpTrace.LogFunctions
) - Add settings to hide sensitive data from logs (
FtpTrace.LogIP
,LogUserName
,LogPassword
) - Add
RecursiveList
to control if recursive listing should be used - Auto-detect Windows CE and disable recursive listing during
DeleteDirectory()
FluentFTP 17.4.2
Major release with lots of new and exciting features:
17.4.2
- Add UploadRateLimit and DownloadRateLimit to control the speed of data transfer (thanks Danie-Brink)
17.4.1
- Fix parsing of LinkTarget during GetListing() on Unix FTP servers
- Improve logging clarity by removing "FluentFTP" prefix in TraceSource
17.4.0
- Add MoveFile() and MoveDirectory() to move files and directories safely
17.3.0
- Automatically verify checksum of a file after upload/download (thanks jblacker)
- Configurable error handling (abort/throw/ignore) for file transfers (thanks jblacker)
- Multiple log levels for tracing/logging debug output in FtpTrace (thanks jblacker)
17.2.0
- Simplify DeleteDirectory() API - the
force
andfastMode
args are no longer required - DeleteDirectory() is faster since it uses one recursive file listing instead of many
17.1.0
- Split stream API into Upload()/UploadFile() and Download()/DownloadFile()
17.0.0
- Greatly improve performance of FileExists() and GetNameListing()
- Add new OS-specific directory listing parsers to GetListing() and GetObjectInfo()
- Support GetObjectInfo() even if machine listings are not supported by the server
- Add
existsMode
to UploadFile() and UploadFiles() allowing for skip/overwrite and append - Remove all usages of string.Format to fix reliability issues caused with UTF filenames
- Fix issue of broken files when uploading/downloading through a proxy (thanks Zoltan666)
- GetReply() is now public so users of OpenRead/OpenAppend/OpenWrite can call it after
16.5.0
- Add async/await support to all methods for .NET 4.5 and onwards (thanks jblacker)
16.2.5
- Add UploadFiles() and DownloadFiles() which is faster than single file transfers
- Allow disabling UTF mode using DisableUTF8 API
16.2.4
- First .NET Core release (DNXCore5.0) using Visual Studio 2017 project and shared codebase.
- Support for .NET 2.0 also added with shims for LINQ commands needed.
16.2.1
- Add FtpListOption.IncludeSelfAndParent to GetListing()
16.1.0
- Use streams during upload/download of files to improve performance with large files
FluentFTP 16.0.18
Add high level API for UploadFile()
and DownloadFile()
Support FTP proxies, and many fixes related to those.
Added Serializable attribute to defined Exceptions
Fix DeleteDirectory infinite recursion calls when GetListing
Fix issues with GetListing()
on anonymous login
FluentFTP 16.0.12
The is the first release of the FluentFTP library, and the 16th major version of the library since it was started in 2011 by J.P. Trosclair.
This library was originally called System.Net.FtpClient and hosted on CodePlex. Users of the older library will have to replace all instances of import System.Net.FtpClient
to import FluentFTP
.
This version requires .NET Framework 4.0. No other frameworks or libraries are required.