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:
GetListingwill manually recurse through directories ifFtpListOption.Recursiveis set and server does not support recursion - New: Added
LastReplyproperty which returns the lastFtpReplyrecieved from the server. - New: Added new upload option
AppendNoCheckto 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
UploadFileAsyncbased on fixes already implemented inUploadFile
19.2.4
- Fix:
UploadFilesAsyncwitherrorHandlingdeletes 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:
DownloadDataTypeBinary value ignored on ASCII-configured FTP servers - Performance improvement: Added
BufferedStreambetweenSslStreamandNetworkStream(thanks @Lukazoid) - Fix: When the FTP server sends 550, transfer is received but not confirmed (thanks @stengnath)
- Fix: Make
Disposemethod ofFTPClientvirtual (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
IOExceptionon Android (thanks @jersiovic) - Fix: Race condition when
BeginInvokecalls the callback before theIAsyncResultis 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
ActivePortsis specified in active FTP mode (thanks @ToniMontana) - Fix: Throw
OperationCanceledExceptioninstead ofFtpExceptionwhen cancellation is requested (thanks @taoyouh)
19.1.2
- Fix: Add support for checking if file exists on Serv-U FTP Server
- Fix: Make
IFtpClientinherit 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:
NetStreamwas not assigned inFtpSocketStreamfor .NET Standard in active FTP mode (thanks @ralftar) - Fix:
CurrentDataTypewas not set for ASCII transfers inDownloadFileAsync/UploadFileAsync(thanks @taoyouh) - Fix: Sometimes
FtpSocketStreamandFtpDataStreamare not disposed inFtpSocketStream.Dispose(thanks @taoyouh)
19.1.0
- New Progress reporting for
UploadFile&DownloadFilemethods viaIProgress - Fix:
Stream.Positionshould not be set inUploadFileInternalunless 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:
FileNotFoundExceptionwith referenceSystem.Console(thanks @artiomchi) - (.NET core) Fix: Thread suspends when calling
UploadFileorDownloadFile(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:
DownloadFileInternalnot 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
IFtpClientinterface to build unit tests upon mainFtpClientclass (thanks Kris0) - Disposing
FtpDataStreamreads server reply and closes the underlying stream (thanks Lukazoid)
18.0.0
- New
SetModifiedTimeAPI 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) GetModifiedTimeandSetModifiedTimenow honor theTimeOffsetproperty inFtpClient- Add
checkIfFileExiststoOpenRead,OpenAppendandOpenWriteto skipGetFileSizecheck - Fix issue where
InnerExceptionis 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
CreateDirectoryandDirectoryExiststo allow null/blank input path values - Fix for
GetFtpDirectoryNameto 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
PlatformUnsupportedexception (if you need async you are free to contribute a non-blocking version of the methods)
17.5.9
- Increase performance of
GetListingby 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
UploadDataTypeandDownloadDataTypein 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
NullReferenceExceptionwhen 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.Threadfor .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.LogToConsoleandLogToFileto control logging in .NET core version
17.5.0
- Add
PlainTextEncryptionAPI 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
RecursiveListto 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
forceandfastModeargs 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
existsModeto 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.