Easily add comprehensive, secure FTP to any .NET application or service.
Product Release History
The following is a list of public releases for all components shipped with PowerTCP FTP for .NET (Latest Release 2018-09-21)
PowerTCP FTP for .NET
Current Version:    Released: 2018-09-21
  • The UsePWD property was added. When set to false no PWD commands will be sent to the server and all directory and path information returned from commands will be relative instead of absolute.    Released: 2018-08-30
  • Licensing Error Exception text has been updated.    Released: 2018-03-06
  • Added support for .NET Standard 2.0 and .NET Core 2.0
  • New .NET Core 2.0 sample projects, referencing the Dart.Ftp.Standard dll
  • Updated trial license operation for use on .NET Standard-compatible platforms
    • Details regarding trial operation for Dart.Ftp.Standard.dll can be found in the Licensing and Trial Operation topic in the included help documentation    Released: 2017-03-08
  • Visual Studio 2017 compatibility.    Released: 2016-12-07
Product fixes in this release:
  • An issue where listings would fail when the PWD command is unsupported on the server has been resolved.  (918)
  • An issue where closing a secure FTP connection on Windows 10 could result in a hard crash has been resolved.  (973)    Released: 2016-04-26
Product fixes in this release:
  • Refactored AUTH command operation when FtpSecurity.Encryptcontrol is set to Encryptcontrol.Explicit. Advertised FTP server features are now used to choose the appropriate AUTH command parameter. If no features are available prior to login then the component will default to AUTH TLS. Added additional enumerations to EncryptControl to provide fine control over which AUTH command parameter is to be used if automatic detection is not desired.  (868)    Released: 2016-03-01
  • The Ftp.Type property was added so that the current data channel transfer type can be determined.
  • The Ftp.DateTimeFormatInfo property was added to support servers that use non-standard timestamps. A Listing constructor overload that accepts DateTimeFormatInfo as a parameter was also added. Please see the documentation of Ftp.DateTimeFormatInfo for more information.
    Developer note: The Ftp.DateTimeFormatInfo property replaces the Listing.Months property which has been removed.
  • Various improvements to illegal file character handling.
  • The FtpSession.Autosize property has been added so that the sending of the SIZE command prior to a file transfer can be toggled.
  • 6TO4 support added.
  • A DataIsBusyChanged event was added to signify when a data channel has started or ceased transferring.
  • If MFMT is not advertised as an available mechanism to modify date time then MDTM will be tried.
Product fixes in this release:
  • The FTP control channel is now correctly monitored for error responses from the server during transfers.  (721)
  • IPv6 addresses are now properly enclosed in brackets when used as a URI or URL. Ex: Destination URL via a proxy connection.  (738, 745)
  • Ftp.Session.LocalEndpoint is now set to the correct address family if the proxy adress family differs from the endpoint address family.  (739, 746)
  • When using Ftp.Put(List localFileSystemInfos, string localRoot, string remoteRoot, Synchronize Sync, file destination now correctly defaults to "filename" in the current directory when remoteRoot is "".  (761)
  • Ftp.Get will no longer cause a file to stay locked if an exception is thrown during a transfer.  (770)
  • All SSL connections will now use close-notify during the closing of the connection.  (773)    Released: 2014-12-19
  • Improved handling of files and directory names when they contain illegal characters on the local file system.
  • Improved firewall transversal for data connections. (See DataConnectType.PassiveOverrideAddress in the documentation for details)
  • Improved support for CAS level 2 applications in medium trust environments.
  • Improved handling of connection failures.
  • A ConnectTimeout property was added to the FtpSession class.
Product fixes in this release:
  • Resolved an issue where LIST commands may fail to timeout correctly.  (TFS362)
  • A compatibility issue with FileZilla FTP Server where downloads would not resume correctly was resolved.  (TFS577)
  • Resolved an issue where a "System.ArgumentException: An item with the same key has already been added" could be thrown when instantiating FTP objects on multiple threads.  (TFS585)    Released: 2013-11-12
  • Trial operation has changed. In addition to the existing 7-day runtime trial license, a 30-day development trial license will also be enforced.
Product fixes in this release:
  • Removed use of the temporary file directory when retrieving a file from an FTP server.  (TFS195)
  • Ensured that the socket timeout is always being set correctly on the data channel for transfers when using PORT.  (TFS270)    Released: 2013-01-07
  • A Response property has been added to the CopyResult object to provide the server response for individual file transfer requests.
Product fixes in this release:
  • The count of the items in the List property of the ProgressEventArgs now reports 1 instead of 0 when transfering a single file.  (TFS54)
  • The transfer type will now correctly reset when the GetSize method is called and the SIZE request fails.  (TFS62)
  • The FtpProtocolException type has been made public.  (TFS63)    Released: 2012-10-24
  • Trial licensing operation updated.    Released: 2012-10-18
  • Updated for Visual Studio 2012 integration and Windows 8 compatibility.
Product fixes in this release:
  • Addressed a globalization issue that prevented correct operation for systems using the following language cultures: Azeri (az), Azeri-Latin (az-Latn), Azeri-Latin-Azerbaijan (az-Latn-AZ), Turkish (tr), Turkish-Turkey (tr-TR)   (TFS31)    Released: 2012-07-12
Product fixes in this release:
  • Fixed a licensing issue with web service applications.
  • Updated the title bar of licensing messages to not indicate a product is in trial when it is licensed.    Released: 2012-06-27
  • Updated trial operation behavior and removed obstacle to using product in .NET Framework 4.5.    Released: 2012-05-03
  • FTP for .NET can now be used in MONO. Tested with MONO version 2.10.5.
  • Added support for EBCDIC file types.
  • The Progress event now provides more data, including completion percentage of a file or multi-copy operation.
  • A new ListView sample for ASP.NET.
Product fixes in this release:
  • There is no longer an indefinite wait when a server sends a 4xx response to an Append command in passive mode.  (5545)
  • When a List call is performed with a specified pattern, the returned ListEntry objects no longer include the pattern as part of their Name.   (5550)
  • Filenames are now correct after a NLST (List with a type parameter of ListType.Names).  (5551)
  • A Get(List, ...) call with an empty remoteRoot parameter no longer results in downloaded filenames with a missing first character.  (5570)
  • The returned CopyResults from a Get(List, ...) call now provide the correct LocalPath, instead of a temporary path.   (5572)
  • The Progress event now provides the correct LocalPath during a Get, instead of a temporary path.  (5606)
  • ListDirectoryTree now works when remote filenames include colons.  (5608)
  • Fixed Mode Z compression.  (5620)    Released: 2011-10-06
Product fixes in this release:
  • Disabling FtpSession.AsciiExtensions now works.    Released: 2011-07-22
Product fixes in this release:
  • The licenses.licx error message has been corrected.  (5485)    Released: 2011-06-29
  • PowerTCP FTP for .NET is re-designed to be the most advanced FTP class library available, yet remains as easy to use as ever.

    Dart Communications is pleased to announce the release of PowerTCP FTP for .NET version 4.4. This release features an innovative, elegant new design, making TCP/IP-based communications easier to work with than ever before. This enhanced library requires fewer resources, provides more flexibility, and elicits code that is easier to re-use and maintain.

    • Implement state-of-the-art multi-threaded operations
    • Create sophisticated high-performance FTP applications
    • Include SSL for airtight security.

    Some of the exciting highlights include:

    • Promotes a Model-View-Controller design, for separation of protocol logic from the user-interface
    • Improved Use of .NET Features including generics and IPv6
    • Streamlined blocking functions that can easily be used asynchronously as well
    • SSL support for secure communications from a single method call
    • Support for Windows applications, services, WCF services, ASP.NET web services and applications.
    • Support for Windows Presentation Foundation (WPF) applications
    • Serializable session object for easily persisting runtime state information
    • Hordes of additional features including automatic listing parsing, recursive wild-card transfers and deletions, and synchronization.
    • Many sample projects for C#, VB.NET, C++/CLI, including ASP.NET
    • Comprehensive MS Help 2.0 and Help Viewer integrated documentation
    • Stand-alone and online documentation also provided
    • .NET Framework 4 Client Profile compatible
    • 64-bit OS support

    Learn more about PowerTCP FTP for .NET 4.4 and download a Free Trial >
    Learn more about PowerTCP 4 technology improvements and upcoming product plans >

  • Tips for Transitioning to Version 4

    This list outlines the coding changes needed when upgrading to version 4. For more on the benefits of the new model, please see PowerTCP 4.

    No more Async methods
    Previous versions of PowerTCP and PowerSNMP implemented an event-driven model for asynchronous use. In addition to a synchronous method, each operation had an asynchronous "BeginXXX" method and corresponding "EndXXX" event. For example, to receive data asynchronously using the Tcp component, the developer called BeginReceive and waited for the EndReceive event to fire with data. In the meantime, other code was free to execute.

    In the new model, asynchronous methods have been eliminated. Instead, the developer uses one or more synchronous methods (for example, "Receive") within a straight blocking function, and then passes a delegate referring to this function to the component's Start method. The Start method then executes the function on its own worker thread.

    Marshaling data back to the UI thread
    It is often necessary to pass information from a worker thread to an element on the UI thread. The new model includes Marshal functions to simplify these cross-thread operations. Each Marshal overload corresponds to an event handler that executes on the UI thread and provides access to data passed using the Marshal method.

    No more "pseudo-blocking"
    Methods in the new model are now true-blocking calls. In previous versions, methods were "pseudo-blocking," meaning that events could be raised while the call blocked. With the new model, methods are tighter and streamlined for better performance. Because the UI is blocked if a method is called from within the UI thread, the Start method should be used in UI environments so the user-interface is not blocked and events can fire.    Released: 2011-01-13
Product fixes in this release:
  • A login error introduced in version was addressed. "An address incompatible with the requested protocol was used" error would occur under certain conditions if the server supported IPv6.  (5374)    Released: 2010-09-21
  • PowerTCP FTP for .NET has been updated with VS 2010 integration.
  • PowerTCP FTP for .NET now supports .NET Framework 4 Client Profile.
Product fixes in this release:
  • Fixed a Null Reference exception that would occur when a server disallowed non-passive transfers.  (5134)
  • Fixed an issue where ProtocolViolation exception would occur when multiple listings or files were retrieved in succession.  (5305, 5334)    Released: 2009-08-17
  • The Ftp component now supports UTF8 filenames.
  • The Put and Get overloads for transferring multiple files now include a boolean parameter for creating empty folders.
Product fixes in this release:
  • The BeginDelete(string, bool, bool, object) overload now works correctly.  (4885)
  • Fixed condition which would cause a "Control connection unexpectedly closed" error.  (4888)
  • More descriptive error messages are presented when transfers fail.  (4901)
  • Failed List commands no longer cause subsequent commands to timeout.  (4946, 4898)
  • Fixed a condition that could result in a timeout when the server ran on the client machine.  (4971)
  • Data connections now use the specified Ftp.Client value as the local address.  (5088)
  • Relative paths now work as localRoot parameters in Put calls.  (5101)
  • Explicitly secure data connections no longer timeout with vsFTPd servers.  (5114)    Released: 2008-07-31
Product fixes in this release:
  • Fixed timeout issue that would occur after using the Get overload that returns a Stream.    Released: 2008-07-30
  • New Ftp.BeginDelete and Ftp.BeginInvoke overloads to parallel Ftp.Delete and Ftp.Invoke overloads.
Product fixes in this release:
  • A CLS Compliance Warning is no longer raised when a VS.NET 2003 project is converted to a 2005 project.  (4556)
  • A stream upload on a fast machine over a slow network connection will no longer result in a truncated file on the server.  (4642)
  • The first file in a group of files uploaded to a non-existent directory on a VxWorks server is now successfully transferred.  (4644)
  • Uploading files to a non-existent directory in Passive mode no longer produces a null reference exception.  (4646)
  • Filenames that contain consecutive spaces in listings are now handled correctly.  (4687)
  • Component now sends PROT command for Implicit security servers that require it.  (4761)
  • Corrected condition which could garble multibyte characters within Unicode listings.  (4782)    Released: 2007-10-09
Product fixes in this release:
  • Can now delete files that contain backslashes on a UNIX system. Addresses issue introduced in version  (4413)
  • Corrected condition that caused an exception to be thrown when calling ExpandRemoteFiles.  (4464)    Released: 2007-09-13
Product fixes in this release:
  • Corrected MGet sample project so that it no longer contains the source code for the MPut project. Affected CSharp sample only.
  • No longer send actual blocksize when issuing the PBSZ command. Several servers had problems with this, so now 'PBSZ 0' is always sent.  (4370)    Released: 2007-08-03
  • Added the Compression property to allow standard, mode z and 'Archive transfer modes. See product page for details on this property.
  • Merged secure functionality from old Secure FTP for .NET product into current FTP for .NET product.
  • ListEntry property is now writable, so that when an unknown listing is encountered, the user can set the ListEntry properties himself after parsing the raw text of the listing.
  • Added overload to delete method that allows deletion of single file rather than a wildcard that could resolve to multiple files.
Product fixes in this release:
  • Help file updated to show that an empty file array returned from the Delete method means that none of the requested files were deleted. Also added a new overload for Delete that takes a single filename.  (2326)
  • Fixed condition that caused FileType to be incorrect when an unexpected 550 response code was received from the NLST command.  (4095)
  • Now properly recover from unexpected response code of 200 when from CWD command.  (4177)
  • Restart now works properly when using overloads that deal with streams instead of filenames.  (4265)
  • Delete method now allows use of both backward and forward slashes in the search pattern.  (4413)    Released: 2006-08-11
  • FTP for .NET now supports 64 bit environments.
Product fixes in this release:
  • FileType is now reset when Windows Firewall is on  (2799)
  • For methods that send multiple commands, a more relevant exception is raised  (3344)
  • Thread count no longer increases with each PORT transfer  (3593)
  • The component now works with secure servers that use certificates only for authorization (no USER/PASS)  (3605)    Released: 2005-11-01
Product fixes in this release:
  • No longer send 'REST 0' if Restart = false
  • Added support for HTTP Connect proxy servers
  • Corrected problem where Invoke would fail when the Connection.Connect() method was used
  • Addressed issues where PASV mode connect would fail
  • Addressed issue where PORT mode listener would keep hold of it's socket    Released: 2005-08-02
  • Corrected problems that prohibited usage with Visual Studio 2005 beta 2 and made sure that all samples compiled and ran after being converted
Product fixes in this release:
  • Corrected problems that prohibited usage with Visual Studio 2005 beta 2    Released: 2005-05-10
  • We strive to continually upgrade our products with new features. Besides improving interoperability with more server implementations, this release adds the following new properties:

    • UseControlAddressForPassive property. Besides setting a record for our use of Hungarian notation, this property allows you to override the address returned from the server when the PASV command is sent. The default is false. If set to true, the IP address of the control connection will be used for establishing the data connection. This is used to establish a data connection to a firewall when the firewall was not smart enough to correctly modify the server's response to the PASV command.
    • UseIpSync property. The XP SP2 firewall enhancement does not respond correctly to the IP/SYNC signal used for aborting a file transfer (neither do many servers). Through the use of this property, your users can control the use of this feature when aborting a file transfer.
    • MaxTransferRate property. Since FTP file transfers can be processor intensive, customers have asked us to throttle the transfer speed. If the value of this property is below the actual transfer rate, the worker thread will be put to sleep each second to slow the actual rate to match this value.
Product fixes in this release:
  • Deep recursive directories greater than 512 characters now supported  (1231)
  • MaxTransferRate property added to throttle transfers  (1731)
  • UseControlAddressForPassive property added to allow bypassing of "dumb" or encyrypting firewalls  (1928)
  • Fixed problem with asynchronous stream STOR  (1955)
  • Fixed recovery from situation where all ports in local port range are in use  (1974)
  • Fixed problem using Invoke() after RawConnect()  (2112)
  • Fixed interoperability issue with server returning 220 for PASS  (2113)
  • Fixed interoperability issue with Titan server that does not close control connection  (2117)
  • Improved listing parsing for UNIX servers  (2145)
  • Fixed interoperability issue with server that returns LF instead of CRLF  (2466)
  • UseIpSync property added to control the use of IP/SYNC when aborting a file retrieve  (2613)
  • AbortTransfer() now send ABOR when storing files, for compatibility with some server  (2670)
  • Improved exception handling doing a GET when local disk if full  (2677)
  • Modified FtpWebRequest.Close() to close control connection  (2764)
  • ConnectedChanged event is now properly raised when control connection is closed  (2827)
  • 0-length files can now be retrieved  (3081)
  • GlobalScape persists marker, so reset to 0 for transfers  (3090)    Released: 2003-10-31
  • This release is a major maintenance update. The version number of the installation kit has been incremented to match the assembly to minimize confusion. For more information, please see the Readme file included with the installation. All the samples have been revised and ASP.NET samples are now included with installation, rather than just from the Web. Plus, all ASP.NET samples now automatically create virutal directories upon installation, making ASP.NET testing easier
Product fixes in this release:
  • Fixed a UNIX list parsing problem  (1375)
  • Improved error handling when receiving a 550 errors in certain circumstances  (1411)
  • Added support for accepting 231 as valid response to USER  (1611)
  • ConnectedChange Event is properly raised when network cable is disconnected  (1675)
  • Fixed a problem when sending a "List -IR path"  (1698)
  • Improved unexpected Close condition error handling  (1699)
  • Fixed a problem with aborting using a Proxy  (1729)
  • Adjusted error messages with FtpFile.Exception  (1779)
  • Fixed a problem when logging in again after an Abort  (1784)
  • Adjusted error message with Abort  (1786)
  • Fixed a file lock situation when Put fails on Login  (1789)
  • Fixed an unhandled exception when entering an invalid hostname with asynch login  (1797)
  • Fixed a problem with certain PASV responses  (1907)
  • Fixed a problem where ClientDataPort would not continue checking after failure  (1969)
  • Fixed a problem with truncated MS-DOS style listing  (1970)
  • State now preserved when an exception results with BeginPut  (2020)    Released: 2002-11-25
  • This update enhances error handling when working with servers that return multiple error messages. Also, the FTP for .NET component now supports multi-gigabyte files, removing any programmatic file size limitation (this does not include OS and server limits). To accommodate this change the Size property of the ListEntry class has been changed from an integer to a long. Finally, Visual Studio .NET 2003 compatibility support has been included along with a Help 1.3 version of the documentation for those only using the .NET Framework without Visual Studio    Released: 2002-11-25
Product fixes in this release:
  • Fixed Trace that was broke in previous release
  • Asynchronous operations now return IAsynchResult object
  • Tested with Visual Studio .NET 2003
  • Documentation now available in Help 1.3 format
  • Added support for multi-gigabyte files    Released: 2002-10-23
Product fixes in this release:
  • Error 550 from a server didn't properly throw an exception
  • Fixed a bug with multiple Put commands
  • Fixed a bug in the .Name property in the ListEntry Object    Released: 2002-08-27
Product fixes in this release:
  • Add Microsoft licensing changes to support proper component use in Web Services and ASP.NET
  • Changed the namespace to Dart.PowerTCP.Ftp    Released: 2002-05-31
Product fixes in this release:
  • An abort of a directory delete will now properly occur
  • More compatibility issues addressed with the SIZE command    Released: 2002-05-17
  • PowerTCP FTP for .NET has recently been updated to provide additional functionality and increased exception handling capability. Go to for more information on PowerTCP FTP for .NET and a free trial.

    Version 1.1 Highlights

    • NEW Delete() and BeginDelete() methods delete directories, files (using wild-cards), and recursive directory trees. Be careful with this!
    • NEW BusyChanged event notifies you when operations start and end, providing a convenient signal for enabling/disabling UI components
    • Additional exception information is now captured for wild-card file transfers.
    • This is a NO-CHARGE upgrade for all customers who purchased version 1.0!    Released: 2002-05-17
Product fixes in this release:
  • Compatibility with legacy FTP servers that don't support the SIZE command addressed
  • Additional exception information is now captured for wild-card file transfers
  • MGET no longer truncates the first two characters of the filename
  • WSFTP MPUT compatibility with non-existant directories fixed
  • WSFTP CWD compatibility addressed
  • BusyChanged event notifies you when operations start and end, providing a convenient signal for enabling/disabling UI components
  • Dispose will no longer cause a lockup in certain situations
  • Delete() and BeginDelete() methods delete directories, files (using wild-cards), and recursive directory trees
  • DLL version changed to 2.0 from 1.0 to indicate a non-backwards compatible interface change
  • Added TransferAborted to the FtpFileStatus enumeration
  • Will now allow an abort during login process
  • Event handling adjusted for better timing
  • Now remove trailing "/" after issuing an RMD command
  • Login will no properly occur if previous attempt was not authenticated
  • Removed delay after a dispose occurs
  • Connected state now properly changes when a server times out