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()