Starksoft FTP/FTPS Component for .NET and Mono

Free, opensource, easy to use .NET 2.0+ / Mono 2.x Component for connecting to FTP servers.

Download

Change Log

Question Forum

Wiki

Browse Source Code

Documentation

License

  • Use with .NET Framework 2.0, 3.0, 3.5, and 4.0 and Mono 2.x without recompiling.
  • 100% CLR compliant C# managed code using .NET sockets - no third party code or dependencies.
  • Execute commands in the background using fire and forget async command equivalents (OpenAsync(), PutFileAsync(), GetFileAsync(), etc).
  • Transfer data both active and passive mode.
  • Control which active ports to use better firewall support.
  • Speed up data tranfers with built-in support for data compression (compress algorithm).
  • Secure data transfers with FTPS (SSL 2.0, SSL 3.0, and TLS 1.0 explicit and implicit)
  • Verify file upload and download file integrity with built-in support for CRC-32, SHA1, and MD5 hash checking to automatically compare files on server with XCRC, XSHA1, and XMD5 commands.
  • Transfer files server-to-server using FXP.
  • Retrieve file directory information as a standard DataSet object or an object collection for ease of use. Data bind the results directly to a data aware object.
  • Extract symbolic link and permission information from UNIX directory listing formats.
  • Easily log transfer events.
  • Easily test to see if a file exists on the server with the method Exists().
  • Retrieve recursive directory listing of files on the FTP server using the method GetDirListDeep().
  • Upload and download files using any .NET stream object.
  • Easily restart FTP transfer. Component will automatically figure out the restart byte position for you.
  • Throttle data transfers with MaxUploadSpeed and MaxDownloadSpeed properties to prevent bandwidth staturation.
  • Connect through HTTP and SOCKS v4, 4a, and 5 proxy servers.
  • Parse UNIX and DOS directory listing formats. Parse UNIX file attributes and symbolic links.
  • Create your own pluggable directory parser with your own code for archaic FTP directory listings by implementing the IFtpItemParser interface.
  • Filter directory and file listings using wildcards and regular expressions.
  • Monitor file transfer progress using events.
  • Easily move files on the FTP server using the Move() method. This feature is especially useful when archiving data on the server after processing or downloading files.
  • Transfer your files in binary or ASCII mode.
  • Automatically adjusts date and time to the correct time zone of local machine.
  • Supports SIZE FTP server command to retrieve the size of the file.
  • Implements RFC 959 and RFC 1579.
Example:

   // create a new FtpClient object with the host and port number to use
   // (optionally create a secure SSL connection) 

   FtpClient ftp = new FtpClient("ftp.host.com", 21); 
  
   // specify a binary, passive connection with no zlib file compression 
   ftp.FileTransferType = TransferType.Binary;
   ftp.DataTransferMode = TransferMode.Passive; 

   // open a connection to the ftp server 
   ftp.Open("username", "password"); 

   // change to the 'files' directory on the ftp server 
   ftp.ChangeDirectory("files");

   // retrieve a listing of the files in the directory 'files'
   // as a collection of FtpItem objects
   FtpItemCollection col = ftp.GetDirList();

   // retrieve a file to disk
   // (optionally we could store it to any System.Stream object)

   ftp.GetFile("file.txt", @"c:\temp\file.text", FileAction.Create);

   // close connection to the ftp server 
   ftp.Close();