FluentFTP
FTP Control Connection. Speaks the FTP protocol with the server and
provides facilities for performing transactions.
Debugging problems with FTP transactions is much easier to do when
you can see exactly what is sent to the server and the reply
FluentFTP gets in return. Please review the Debug example
below for information on how to add s for capturing
the conversation between FluentFTP and the server.
The following example illustrates how to assist in debugging
FluentFTP by getting a transaction log from the server.
The following example demonstrates adding a custom file
listing parser in the event that you encounter a list format
not already supported.
The following example demonstrates how to validate
a SSL certificate when using SSL/TLS.
The following example demonstrates how to download a file.
The following example demonstrates how to download a file
using a URI object.
The following example demonstrates how to upload a file.
The following example demonstrates how to upload a file
using a URI object.
The following example demonstrates how to append to a file.
The following example demonstrates how to append to a file
using a URI object.
The following example demonstrates how to get a file
listing from the server.
FTP Control Connection. Speaks the FTP protocol with the server and
provides facilities for performing transactions.
Debugging problems with FTP transactions is much easier to do when
you can see exactly what is sent to the server and the reply
FluentFTP gets in return. Please review the Debug example
below for information on how to add s for capturing
the conversation between FluentFTP and the server.
The following example illustrates how to assist in debugging
FluentFTP by getting a transaction log from the server.
The following example demonstrates adding a custom file
listing parser in the event that you encounter a list format
not already supported.
The following example demonstrates how to validate
a SSL certificate when using SSL/TLS.
The following example demonstrates how to download a file.
The following example demonstrates how to download a file
using a URI object.
The following example demonstrates how to upload a file.
The following example demonstrates how to upload a file
using a URI object.
The following example demonstrates how to append to a file.
The following example demonstrates how to append to a file
using a URI object.
The following example demonstrates how to get a file
listing from the server.
FTP Control Connection. Speaks the FTP protocol with the server and
provides facilities for performing transactions.
Debugging problems with FTP transactions is much easier to do when
you can see exactly what is sent to the server and the reply
FluentFTP gets in return. Please review the Debug example
below for information on how to add s for capturing
the conversation between FluentFTP and the server.
The following example illustrates how to assist in debugging
FluentFTP by getting a transaction log from the server.
The following example demonstrates adding a custom file
listing parser in the event that you encounter a list format
not already supported.
The following example demonstrates how to validate
a SSL certificate when using SSL/TLS.
The following example demonstrates how to download a file.
The following example demonstrates how to download a file
using a URI object.
The following example demonstrates how to upload a file.
The following example demonstrates how to upload a file
using a URI object.
The following example demonstrates how to append to a file.
The following example demonstrates how to append to a file
using a URI object.
The following example demonstrates how to get a file
listing from the server.
FTP Control Connection. Speaks the FTP protocol with the server and
provides facilities for performing transactions.
Debugging problems with FTP transactions is much easier to do when
you can see exactly what is sent to the server and the reply
FluentFTP gets in return. Please review the Debug example
below for information on how to add s for capturing
the conversation between FluentFTP and the server.
The following example illustrates how to assist in debugging
FluentFTP by getting a transaction log from the server.
The following example demonstrates adding a custom file
listing parser in the event that you encounter a list format
not already supported.
The following example demonstrates how to validate
a SSL certificate when using SSL/TLS.
The following example demonstrates how to download a file.
The following example demonstrates how to download a file
using a URI object.
The following example demonstrates how to upload a file.
The following example demonstrates how to upload a file
using a URI object.
The following example demonstrates how to append to a file.
The following example demonstrates how to append to a file
using a URI object.
The following example demonstrates how to get a file
listing from the server.
FTP Control Connection. Speaks the FTP protocol with the server and
provides facilities for performing transactions.
Debugging problems with FTP transactions is much easier to do when
you can see exactly what is sent to the server and the reply
FluentFTP gets in return. Please review the Debug example
below for information on how to add s for capturing
the conversation between FluentFTP and the server.
The following example illustrates how to assist in debugging
FluentFTP by getting a transaction log from the server.
The following example demonstrates adding a custom file
listing parser in the event that you encounter a list format
not already supported.
The following example demonstrates how to validate
a SSL certificate when using SSL/TLS.
The following example demonstrates how to download a file.
The following example demonstrates how to download a file
using a URI object.
The following example demonstrates how to upload a file.
The following example demonstrates how to upload a file
using a URI object.
The following example demonstrates how to append to a file.
The following example demonstrates how to append to a file
using a URI object.
The following example demonstrates how to get a file
listing from the server.
FTP Control Connection. Speaks the FTP protocol with the server and
provides facilities for performing transactions.
Debugging problems with FTP transactions is much easier to do when
you can see exactly what is sent to the server and the reply
FluentFTP gets in return. Please review the Debug example
below for information on how to add s for capturing
the conversation between FluentFTP and the server.
The following example illustrates how to assist in debugging
FluentFTP by getting a transaction log from the server.
The following example demonstrates adding a custom file
listing parser in the event that you encounter a list format
not already supported.
The following example demonstrates how to validate
a SSL certificate when using SSL/TLS.
The following example demonstrates how to download a file.
The following example demonstrates how to download a file
using a URI object.
The following example demonstrates how to upload a file.
The following example demonstrates how to upload a file
using a URI object.
The following example demonstrates how to append to a file.
The following example demonstrates how to append to a file
using a URI object.
The following example demonstrates how to get a file
listing from the server.
Used for internally synchronizing access to this
object from multiple threads
For usage by FTP proxies only
A list of asynchronous methods that are in progress
Control connection socket stream
Gets a value indicating if this object has already been disposed.
Gets the base stream for talking to the server via
the control connection.
Flags specifying which versions of the internet protocol to
support when making a connection. All addresses returned during
name resolution are tried until a successful connection is made.
You can fine tune which versions of the internet protocol to use
by adding or removing flags here. I.e., setting this property
to FtpIpVersion.IPv4 will cause the connection process to
ignore IPv6 addresses. The default value is ANY version.
Gets or sets the length of time in milliseconds
that must pass since the last socket activity
before calling
on the socket to test for connectivity.
Setting this interval too low will
have a negative impact on performance. Setting this
interval to 0 disables Polling all together.
The default value is 15 seconds.
Gets or sets a value indicating whether a test should be performed to
see if there is stale (unrequested data) sitting on the socket. In some
cases the control connection may time out but before the server closes
the connection it might send a 4xx response that was unexpected and
can cause synchronization errors with transactions. To avoid this
problem the method checks to see if there is any data
available on the socket before executing a command. On Azure hosting
platforms this check can cause an exception to be thrown. In order
to work around the exception you can set this property to false
which will skip the test entirely however doing so eliminates the
best effort attempt of detecting such scenarios. See this thread
for more details about the Azure problem:
https://netftp.codeplex.com/discussions/535879
Gets a value indicating if the connection is alive
When this value is set to true (default) the control connection
is cloned and a new connection the server is established for the
data channel operation. This is a thread safe approach to make
asynchronous operations on a single control connection transparent
to the developer.
Gets a value indicating if this control connection is a clone. This property
is used with data streams to determine if the connection should be closed
when the stream is closed. Servers typically only allow 1 data connection
per control connection. If you try to open multiple data connections this
object will be cloned for 2 or more resulting in N new connections to the
server.
Gets or sets the text encoding being used when talking with the server. The default
value is however upon connection, the client checks
for UTF8 support and if it's there this property is switched over to
. Manually setting this value overrides automatic detection
based on the FEAT list; if you change this value it's always used
regardless of what the server advertises, if anything.
The server to connect to
The port to connect to. If this value is set to 0 (Default) the port used
will be determined by the type of SSL used or if no SSL is to be used it
will automatically connect to port 21.
Credentials used for authentication
Gets or sets a value that controls the maximum depth
of recursion that will follow symbolic
links before giving up. You can also specify the value
to be used as one of the overloaded parameters to the
method. The default value is 20. Specifying
-1 here means indefinitely try to resolve a link. This is
not recommended for obvious reasons (stack overflow).
Client certificates to be used in SSL authentication process
Delegate used for resolving local address, used for active data connections
This can be used in case you're behind a router, but port forwarding is configured to forward the
ports from your router to your internal IP. In that case, we need to send the router's IP instead of our internal IP.
See example: FtpClient.GetPublicIP -> This uses Ipify api to find external IP
Ports used for Active Data Connection
Data connection type, default is AutoPassive which tries
a connection with EPSV first and if it fails then tries
PASV before giving up. If you know exactly which kind of
connection you need you can slightly increase performance
by defining a specific type of passive or active data
connection here.
Disconnect from the server without sending QUIT. This helps
work around IOExceptions caused by buggy connection resets
when closing the control connection.
Gets or sets the length of time in milliseconds to wait for a connection
attempt to succeed before giving up. Default is 15000 (15 seconds).
Gets or sets the length of time wait in milliseconds for data to be
read from the underlying stream. The default value is 15000 (15 seconds).
Gets or sets the length of time in milliseconds for a data connection
to be established before giving up. Default is 15000 (15 seconds).
Gets or sets the length of time in milliseconds the data channel
should wait for the server to send data. Default value is
15000 (15 seconds).
Gets or sets a value indicating if should be set on
the underlying stream's socket. If the connection is alive, the option is
adjusted in real-time. The value is stored and the KeepAlive option is set
accordingly upon any new connections. The value set here is also applied to
all future data streams. It has no affect on cloned control connections or
data connections already in progress. The default value is false.
Gets the server capabilities represented by flags
Get the hash types supported by the server, if any. This
is a recent extension to the protocol that is not fully
standardized and is not guaranteed to work. See here for
more details:
http://tools.ietf.org/html/draft-bryan-ftpext-hash-02
Type of SSL to use, or none. Default is none. Explicit is TLS, Implicit is SSL.
Indicates if data channel transfers should be encrypted. Only valid if
property is not equal to .
Indicates if the encryption should be disabled immediately after connecting using a CCC command.
This is useful when you have a FTP firewall that requires plaintext FTP, but your server mandates FTPS connections.
Encryption protocols to use. Only valid if EncryptionMode property is not equal to .
Default value is .NET Framework defaults from the class.
Event is fired to validate SSL certificates. If this event is
not handled and there are errors validating the certificate
the connection will be aborted.
Gets the type of system/server that we're connected to. Typically begins with "WINDOWS" or "UNIX".
Gets the type of the FTP server software that we're connected to.
Gets the connection type
Gets the last reply recieved from the server
Creates a new instance of an FTP Client.
Creates a new instance of an FTP Client, with the given host.
Creates a new instance of an FTP Client, with the given host and credentials.
Creates a new instance of an FTP Client, with the given host, port and credentials.
Creates a new instance of an FTP Client, with the given host, username and password.
Creates a new instance of an FTP Client, with the given host, port, username and password.
Creates a new instance of this class. Useful in FTP proxy classes.
Disconnects from the server, releases resources held by this
object.
Finalizer
Clones the control connection for opening multiple data streams
A new control connection with the same property settings as this one
Executes a command
The command to execute
The servers reply to the command
Performs execution of the specified command asynchronously
The command to execute
The method
State object
IAsyncResult
Ends an asynchronous command
IAsyncResult returned from BeginExecute
FtpReply object (never null).
Performs an asynchronous execution of the specified command
The command to execute
The servers reply to the command
Retrieves a reply from the server. Do not execute this method
unless you are sure that a reply has been sent, i.e., you
executed a command. Doing so will cause the code to hang
indefinitely waiting for a server reply that is never coming.
FtpReply representing the response from the server
Retrieves a reply from the server. Do not execute this method
unless you are sure that a reply has been sent, i.e., you
executed a command. Doing so will cause the code to hang
indefinitely waiting for a server reply that is never coming.
FtpReply representing the response from the server
Connect to the server
Thrown if this object has been disposed.
Connect to the server
Thrown if this object has been disposed.
Connect to the FTP server. Overwritten in proxy classes.
Connect to the FTP server. Overwritten in proxy classes.
Connect to the FTP server. Overwritten in proxy classes.
Connect to the FTP server. Overwritten in proxy classes.
Called during Connect(). Typically extended by FTP proxies.
Called during . Typically extended by FTP proxies.
Populates the capabilities flags based on capabilities
supported by this server. This method is overridable
so that new features can be supported
The reply object from the FEAT command. The InfoMessages property will
contain a list of the features the server supported delimited by a new line '\n' character.
Initiates a connection to the server
AsyncCallback method
State object
IAsyncResult
Ends an asynchronous connection attempt to the server from
returned from
Detect the FTP Server based on the welcome message sent by the server after getting the 220 connection command.
Its the primary method.
Detect the FTP Server based on the response to the SYST connection command.
Its a fallback method if the server did not send an identifying welcome message.
Performs a login on the server. This method is overridable so
that the login procedure can be changed to support, for example,
a FTP proxy.
Performs a login on the server. This method is overridable so
that the login procedure can be changed to support, for example,
a FTP proxy.
Performs a login on the server. This method is overridable so
that the login procedure can be changed to support, for example,
a FTP proxy.
Performs a login on the server. This method is overridable so
that the login procedure can be changed to support, for example,
a FTP proxy.
Disconnects from the server
Initiates a disconnection on the server
method
State object
IAsyncResult
Ends a call to
returned from
Disconnects from the server asynchronously
Catches the socket stream ssl validation event and fires the event handlers
attached to this object for validating SSL certificates
The stream that fired the event
The event args used to validate the certificate
Fires the SSL validation event
Event Args
Performs a bitwise and to check if the specified
flag is set on the property.
The to check for
True if the feature was found, false otherwise
Retrieves the delegate for the specified IAsyncResult and removes
it from the m_asyncmethods collection if the operation is successful
Type of delegate to retrieve
The IAsyncResult to retrieve the delegate for
The delegate that generated the specified IAsyncResult
Ensure a relative path is absolute by appending the working dir
Ensure a relative path is absolute by appending the working dir
Disables UTF8 support and changes the Encoding property
back to ASCII. If the server returns an error when trying
to turn UTF8 off a FtpCommandException will be thrown.
Data shouldn't be on the socket, if it is it probably
means we've been disconnected. Read and discard
whatever is there and close the connection (optional).
close the connection?
even read encrypted data?
trace data to logs?
Data shouldn't be on the socket, if it is it probably
means we've been disconnected. Read and discard
whatever is there and close the connection (optional).
close the connection?
even read encrypted data?
trace data to logs?
Calculate the CHMOD integer value given a set of permissions.
Connects to the specified URI. If the path specified by the URI ends with a
/ then the working directory is changed to the path specified.
The URI to parse
Indicates if a ssl certificate should be validated when using FTPS schemes
FtpClient object
Connects to the specified URI. If the path specified by the URI ends with a
/ then the working directory is changed to the path specified.
The URI to parse
FtpClient object
Opens a stream to the file specified by the URI
FTP/FTPS URI pointing at a file
Indicates if a ssl certificate should be validated when using FTPS schemes
ASCII/Binary mode
Restart location
Stream object
Opens a stream to the file specified by the URI
FTP/FTPS URI pointing at a file
Indicates if a ssl certificate should be validated when using FTPS schemes
ASCII/Binary mode
Stream object
Opens a stream to the file specified by the URI
FTP/FTPS URI pointing at a file
Indicates if a ssl certificate should be validated when using FTPS schemes
Stream object
Opens a stream to the file specified by the URI
FTP/FTPS URI pointing at a file
Stream object
Opens a stream to the file specified by the URI
FTP/FTPS URI pointing at a file
Indicates if a ssl certificate should be validated when using FTPS schemes
ASCII/Binary mode
Stream object
Opens a stream to the file specified by the URI
FTP/FTPS URI pointing at a file
Indicates if a ssl certificate should be validated when using FTPS schemes
Stream object
Opens a stream to the file specified by the URI
FTP/FTPS URI pointing at a file
Stream object
Opens a stream to the file specified by the URI
FTP/FTPS URI pointing at a file
Indicates if a ssl certificate should be validated when using FTPS schemes
ASCII/Binary mode
Stream object
Opens a stream to the file specified by the URI
FTP/FTPS URI pointing at a file
Indicates if a ssl certificate should be validated when using FTPS schemes
Stream object
Opens a stream to the file specified by the URI
FTP/FTPS URI pointing at a file
Stream object
Calculate you public internet IP using the ipify service. Returns null if cannot be calculated.
Public IP Address
Gets the currently selected hash algorithm for the HASH command.
This feature is experimental. See this link for details:
http://tools.ietf.org/html/draft-bryan-ftpext-hash-02
The flag or if there was a problem.
Begins an asynchronous operation to get the currently selected hash algorithm for the HASH command.
This feature is experimental. See this link for details:
http://tools.ietf.org/html/draft-bryan-ftpext-hash-02
Async callback
State object
IAsyncResult
Ends a call to
IAsyncResult returned from
The flag or if there was a problem.
Gets the currently selected hash algorithm for the HASH command asynchronously.
This feature is experimental. See this link for details:
http://tools.ietf.org/html/draft-bryan-ftpext-hash-02
The flag or if there was a problem.
Sets the hash algorithm on the server to use for the HASH command.
If you specify an algorithm not listed in
a will be thrown
so be sure to query that list of Flags before
selecting a hash algorithm. Support for the
HASH command is experimental. Please see
the following link for more details:
http://tools.ietf.org/html/draft-bryan-ftpext-hash-02
Hash Algorithm
Thrown if the selected algorithm is not available on the server
Begins an asynchronous operation to set the hash algorithm on the server to use for the HASH command.
If you specify an algorithm not listed in
a will be thrown
so be sure to query that list of Flags before
selecting a hash algorithm. Support for the
HASH command is experimental. Please see
the following link for more details:
http://tools.ietf.org/html/draft-bryan-ftpext-hash-02
Hash algorithm to use
Async Callback
State object
IAsyncResult
Ends an asynchronous call to
IAsyncResult returned from
Sets the hash algorithm on the server to be used with the HASH command asynchronously.
Hash algorithm to use
Thrown if the selected algorithm is not available on the server
Gets the hash of an object on the server using the currently selected hash algorithm.
Supported algorithms, if any, are available in the
property. You should confirm that it's not equal
to before calling this method
otherwise the server trigger a
due to a lack of support for the HASH command. You can
set the algorithm using the method and
you can query the server for the current hash algorithm
using the method.
This feature is experimental and based on the following draft:
http://tools.ietf.org/html/draft-bryan-ftpext-hash-02
Full or relative path of the object to compute the hash for.
The hash of the file.
Thrown if the property is ,
the remote path does not exist, or the command cannot be executed.
Path argument is null
Thrown when an unknown hash algorithm type is returned by the server
Begins an asynchronous operation to get the hash of an object on the server using the currently selected hash algorithm.
Supported algorithms, if any, are available in the
property. You should confirm that it's not equal
to before calling this method
otherwise the server trigger a
due to a lack of support for the HASH command. You can
set the algorithm using the method and
you can query the server for the current hash algorithm
using the method.
This feature is experimental and based on the following draft:
http://tools.ietf.org/html/draft-bryan-ftpext-hash-02
The file you want the server to compute the hash for
AsyncCallback
State object
IAsyncResult
Ends an asynchronous call to
IAsyncResult returned from
Gets the hash of an object on the server using the currently selected hash algorithm asynchronously.
Supported algorithms, if any, are available in the
property. You should confirm that it's not equal
to before calling this method
otherwise the server trigger a
due to a lack of support for the HASH command. You can
set the algorithm using the method and
you can query the server for the current hash algorithm
using the method.
This feature is experimental and based on the following draft:
http://tools.ietf.org/html/draft-bryan-ftpext-hash-02
The file you want the server to compute the hash for
Thrown if the property is ,
the remote path does not exist, or the command cannot be executed.
Path argument is null
Thrown when an unknown hash algorithm type is returned by the server
The hash of the file.
Retrieves a checksum of the given file using a checksum method that the server supports, if any.
The algorithm used goes in this order:
1. HASH command; server preferred algorithm. See
2. MD5 / XMD5 commands
3. XSHA1 command
4. XSHA256 command
5. XSHA512 command
6. XCRC command
Full or relative path of the file to checksum
object containing the value and algorithm. Use the property to
determine if this command was successful. s can be thrown from
the underlying calls.
The command fails
Begins an asynchronous operation to retrieve a checksum of the given file using a checksum method that the server supports, if any.
The algorithm used goes in this order:
1. HASH command; server preferred algorithm. See
2. MD5 / XMD5 commands
3. XSHA1 command
4. XSHA256 command
5. XSHA512 command
6. XCRC command
Full or relative path to remote file
AsyncCallback
State Object
IAsyncResult
Ends an asynchronous call to
IAsyncResult returned from
object containing the value and algorithm. Use the property to
determine if this command was successful. s can be thrown from
the underlying calls.
Retrieves a checksum of the given file using a checksum method that the server supports, if any.
The algorithm used goes in this order:
1. HASH command; server preferred algorithm. See
2. MD5 / XMD5 commands
3. XSHA1 command
4. XSHA256 command
5. XSHA512 command
6. XCRC command
Full or relative path of the file to checksum
object containing the value and algorithm. Use the property to
determine if this command was successful. s can be thrown from
the underlying calls.
The command fails
Gets the MD5 hash of the specified file using MD5. This is a non-standard extension
to the protocol and may or may not work. A FtpCommandException will be
thrown if the command fails.
Full or relative path to remote file
Server response, presumably the MD5 hash.
The command fails
Begins an asynchronous operation to retrieve a MD5 hash. The MD5 command is non-standard
and not guaranteed to work.
Full or relative path to remote file
AsyncCallback
State Object
IAsyncResult
Ends an asynchronous call to
IAsyncResult returned from
The MD5 hash of the specified file.
Gets the MD5 hash of the specified file using MD5 asynchronously. This is a non-standard extension
to the protocol and may or may not work. A FtpCommandException will be
thrown if the command fails.
Full or relative path to remote file
Server response, presumably the MD5 hash.
The command fails
Get the CRC value of the specified file. This is a non-standard extension of the protocol
and may throw a FtpCommandException if the server does not support it.
The path of the file you'd like the server to compute the CRC value for.
The response from the server, typically the XCRC value. FtpCommandException thrown on error
The command fails
Begins an asynchronous operation to retrieve a CRC hash. The XCRC command is non-standard
and not guaranteed to work.
Full or relative path to remote file
AsyncCallback
State Object
IAsyncResult
Ends an asynchronous call to
IAsyncResult returned from
The CRC hash of the specified file.
Gets the CRC hash of the specified file using XCRC asynchronously. This is a non-standard extension
to the protocol and may or may not work. A FtpCommandException will be
thrown if the command fails.
Full or relative path to remote file
Server response, presumably the CRC hash.
The command fails
Gets the MD5 hash of the specified file using XMD5. This is a non-standard extension
to the protocol and may or may not work. A FtpCommandException will be
thrown if the command fails.
Full or relative path to remote file
Server response, presumably the MD5 hash.
The command fails
Begins an asynchronous operation to retrieve a XMD5 hash. The XMD5 command is non-standard
and not guaranteed to work.
Full or relative path to remote file
AsyncCallback
State Object
IAsyncResult
Ends an asynchronous call to
IAsyncResult returned from
The MD5 hash of the specified file.
Gets the MD5 hash of the specified file using XMD5 asynchronously. This is a non-standard extension
to the protocol and may or may not work. A FtpCommandException will be
thrown if the command fails.
Full or relative path to remote file
Server response, presumably the MD5 hash.
The command fails
Gets the SHA-1 hash of the specified file using XSHA1. This is a non-standard extension
to the protocol and may or may not work. A FtpCommandException will be
thrown if the command fails.
Full or relative path to remote file
Server response, presumably the SHA-1 hash.
The command fails
Begins an asynchronous operation to retrieve a SHA1 hash. The XSHA1 command is non-standard
and not guaranteed to work.
Full or relative path to remote file
AsyncCallback
State Object
IAsyncResult
Ends an asynchronous call to
IAsyncResult returned from
The SHA-1 hash of the specified file.
Gets the SHA-1 hash of the specified file using XSHA1 asynchronously. This is a non-standard extension
to the protocol and may or may not work. A FtpCommandException will be
thrown if the command fails.
Full or relative path to remote file
Server response, presumably the SHA-1 hash.
The command fails
Gets the SHA-256 hash of the specified file using XSHA256. This is a non-standard extension
to the protocol and may or may not work. A FtpCommandException will be
thrown if the command fails.
Full or relative path to remote file
Server response, presumably the SHA-256 hash.
The command fails
Begins an asynchronous operation to retrieve a SHA256 hash. The XSHA256 command is non-standard
and not guaranteed to work.
Full or relative path to remote file
AsyncCallback
State Object
IAsyncResult
Ends an asynchronous call to
IAsyncResult returned from
The SHA-256 hash of the specified file.
Gets the SHA-256 hash of the specified file using XSHA256 asynchronously. This is a non-standard extension
to the protocol and may or may not work. A FtpCommandException will be
thrown if the command fails.
Full or relative path to remote file
Server response, presumably the SHA-256 hash.
The command fails
Gets the SHA-512 hash of the specified file using XSHA512. This is a non-standard extension
to the protocol and may or may not work. A FtpCommandException will be
thrown if the command fails.
Full or relative path to remote file
Server response, presumably the SHA-512 hash.
The command fails
Begins an asynchronous operation to retrieve a SHA512 hash. The XSHA512 command is non-standard
and not guaranteed to work.
Full or relative path to remote file
AsyncCallback
State Object
IAsyncResult
Ends an asynchronous call to
IAsyncResult returned from
The SHA-512 hash of the specified file.
Gets the SHA-512 hash of the specified file using XSHA512 asynchronously. This is a non-standard extension
to the protocol and may or may not work. A FtpCommandException will be
thrown if the command fails.
Full or relative path to remote file
Server response, presumably the SHA-512 hash.
The command fails
Gets or sets the number of bytes transferred in a single chunk (a single FTP command).
Used by / and /
to transfer large files in multiple chunks.
Gets or sets the retry attempts allowed when a verification failure occurs during download or upload.
This value must be set to 1 or more.
Rate limit for uploads in kbyte/s. Set this to 0 for unlimited speed.
Honored by high-level API such as Upload(), Download(), UploadFile(), DownloadFile()..
Rate limit for downloads in kbytes/s. Set this to 0 for unlimited speed.
Honored by high-level API such as Upload(), Download(), UploadFile(), DownloadFile()..
Controls if the high-level API uploads files in Binary or ASCII mode.
Controls if the high-level API downloads files in Binary or ASCII mode.
Uploads the given file paths to a single folder on the server.
All files are placed directly into the given folder regardless of their path on the local filesystem.
High-level API that takes care of various edge cases internally.
Supports very large files since it uploads data in chunks.
Faster than uploading single files with since it performs a single "file exists" check rather than one check per file.
The full or relative paths to the files on the local file system. Files can be from multiple folders.
The full or relative path to the directory that files will be uploaded on the server
What to do if the file already exists? Skip, overwrite or append? Set this to for fastest performance,
but only if you are SURE that the files do not exist on the server.
Create the remote directory if it does not exist.
Sets if checksum verification is required for a successful download and what to do if it fails verification (See Remarks)
Used to determine how errors are handled
The count of how many files were uploaded successfully. Affected when files are skipped when they already exist.
If verification is enabled (All options other than ) the hash will be checked against the server. If the server does not support
any hash algorithm, then verification is ignored. If only is set then the return of this method depends on both a successful
upload & verification. Additionally, if any verify option is set and a retry is attempted the existsMode will automatically be set to .
If is set and is not set, then individual verification errors will not cause an exception
to propagate from this method.
Uploads the given file paths to a single folder on the server.
All files are placed directly into the given folder regardless of their path on the local filesystem.
High-level API that takes care of various edge cases internally.
Supports very large files since it uploads data in chunks.
Faster than uploading single files with since it performs a single "file exists" check rather than one check per file.
Files to be uploaded
The full or relative path to the directory that files will be uploaded on the server
What to do if the file already exists? Skip, overwrite or append? Set this to FtpExists.None for fastest performance but only if you are SURE that the files do not exist on the server.
Create the remote directory if it does not exist.
Sets if checksum verification is required for a successful download and what to do if it fails verification (See Remarks)
Used to determine how errors are handled
The count of how many files were downloaded successfully. When existing files are skipped, they are not counted.
If verification is enabled (All options other than ) the hash will be checked against the server. If the server does not support
any hash algorithm, then verification is ignored. If only is set then the return of this method depends on both a successful
upload & verification. Additionally, if any verify option is set and a retry is attempted the existsMode will automatically be set to .
If is set and is not set, then individual verification errors will not cause an exception
to propagate from this method.
Uploads the given file paths to a single folder on the server asynchronously.
All files are placed directly into the given folder regardless of their path on the local filesystem.
High-level API that takes care of various edge cases internally.
Supports very large files since it uploads data in chunks.
Faster than uploading single files with since it performs a single "file exists" check rather than one check per file.
The full or relative paths to the files on the local file system. Files can be from multiple folders.
The full or relative path to the directory that files will be uploaded on the server
What to do if the file already exists? Skip, overwrite or append? Set this to FtpExists.None for fastest performance but only if you are SURE that the files do not exist on the server.
Create the remote directory if it does not exist.
Sets if checksum verification is required for a successful upload and what to do if it fails verification (See Remarks)
Used to determine how errors are handled
The token to monitor for cancellation requests
The count of how many files were uploaded successfully. Affected when files are skipped when they already exist.
If verification is enabled (All options other than ) the hash will be checked against the server. If the server does not support
any hash algorithm, then verification is ignored. If only is set then the return of this method depends on both a successful
upload & verification. Additionally, if any verify option is set and a retry is attempted the existsMode will automatically be set to .
If is set and is not set, then individual verification errors will not cause an exception
to propagate from this method.
Uploads the given file paths to a single folder on the server asynchronously.
All files are placed directly into the given folder regardless of their path on the local filesystem.
High-level API that takes care of various edge cases internally.
Supports very large files since it uploads data in chunks.
Faster than uploading single files with since it performs a single "file exists" check rather than one check per file.
The full or relative paths to the files on the local file system. Files can be from multiple folders.
The full or relative path to the directory that files will be uploaded on the server
What to do if the file already exists? Skip, overwrite or append? Set this to FtpExists.None for fastest performance but only if you are SURE that the files do not exist on the server.
Create the remote directory if it does not exist.
Sets if checksum verification is required for a successful upload and what to do if it fails verification (See Remarks)
Used to determine how errors are handled
The count of how many files were uploaded successfully. Affected when files are skipped when they already exist.
If verification is enabled (All options other than ) the hash will be checked against the server. If the server does not support
any hash algorithm, then verification is ignored. If only is set then the return of this method depends on both a successful
upload & verification. Additionally, if any verify option is set and a retry is attempted the existsMode will automatically be set to .
If is set and is not set, then individual verification errors will not cause an exception
to propagate from this method.
Downloads the specified files into a local single directory.
High-level API that takes care of various edge cases internally.
Supports very large files since it downloads data in chunks.
Same speed as .
The full or relative path to the directory that files will be downloaded into.
The full or relative paths to the files on the server
True if you want the local file to be overwritten if it already exists. (Default value is true)
Sets if checksum verification is required for a successful download and what to do if it fails verification (See Remarks)
Used to determine how errors are handled
The count of how many files were downloaded successfully. When existing files are skipped, they are not counted.
If verification is enabled (All options other than ) the hash will be checked against the server. If the server does not support
any hash algorithm, then verification is ignored. If only is set then the return of this method depends on both a successful
upload & verification. Additionally, if any verify option is set and a retry is attempted then overwrite will automatically switch to true for subsequent attempts.
If is set and is not set, then individual verification errors will not cause an exception
to propagate from this method.
Downloads the specified files into a local single directory.
High-level API that takes care of various edge cases internally.
Supports very large files since it downloads data in chunks.
Same speed as .
The full or relative path to the directory that files will be downloaded.
The full or relative paths to the files on the server
True if you want the local file to be overwritten if it already exists. (Default value is true)
Sets if checksum verification is required for a successful download and what to do if it fails verification (See Remarks)
Used to determine how errors are handled
The token to monitor for cancellation requests
The count of how many files were downloaded successfully. When existing files are skipped, they are not counted.
If verification is enabled (All options other than ) the hash will be checked against the server. If the server does not support
any hash algorithm, then verification is ignored. If only is set then the return of this method depends on both a successful
upload & verification. Additionally, if any verify option is set and a retry is attempted then overwrite will automatically be set to true for subsequent attempts.
If is set and is not set, then individual verification errors will not cause an exception
to propagate from this method.
Downloads the specified files into a local single directory.
High-level API that takes care of various edge cases internally.
Supports very large files since it downloads data in chunks.
Same speed as .
The full or relative path to the directory that files will be downloaded into.
The full or relative paths to the files on the server
True if you want the local file to be overwritten if it already exists. (Default value is true)
Sets if checksum verification is required for a successful download and what to do if it fails verification (See Remarks)
Used to determine how errors are handled
The count of how many files were downloaded successfully. When existing files are skipped, they are not counted.
If verification is enabled (All options other than ) the hash will be checked against the server. If the server does not support
any hash algorithm, then verification is ignored. If only is set then the return of this method depends on both a successful
upload & verification. Additionally, if any verify option is set and a retry is attempted then overwrite will automatically be set to true for subsequent attempts.
If is set and is not set, then individual verification errors will not cause an exception
to propagate from this method.
Uploads the specified file directly onto the server.
High-level API that takes care of various edge cases internally.
Supports very large files since it uploads data in chunks.
The full or relative path to the file on the local file system
The full or relative path to the file on the server
What to do if the file already exists? Skip, overwrite or append? Set this to for fastest performance
but only if you are SURE that the files do not exist on the server.
Create the remote directory if it does not exist. Slows down upload due to additional checks required.
Sets if checksum verification is required for a successful upload and what to do if it fails verification (See Remarks)
Provide an implementation of IProgress to track upload progress. The value provided is in the range 0 to 100, indicating the percentage of the file transferred. If the progress is indeterminate, -1 is sent.
If true then the file was uploaded, false otherwise.
If verification is enabled (All options other than ) the hash will be checked against the server. If the server does not support
any hash algorithm, then verification is ignored. If only is set then the return of this method depends on both a successful
upload & verification. Additionally, if any verify option is set and a retry is attempted the existsMode will automatically be set to .
Uploads the specified file directly onto the server asynchronously.
High-level API that takes care of various edge cases internally.
Supports very large files since it uploads data in chunks.
The full or relative path to the file on the local file system
The full or relative path to the file on the server
What to do if the file already exists? Skip, overwrite or append? Set this to for fastest performance
but only if you are SURE that the files do not exist on the server.
Create the remote directory if it does not exist. Slows down upload due to additional checks required.
Sets if checksum verification is required for a successful upload and what to do if it fails verification (See Remarks)
The token to monitor for cancellation requests.
Provide an implementation of IProgress to track upload progress. The value provided is in the range 0 to 100, indicating the percentage of the file transferred. If the progress is indeterminate, -1 is sent.
If true then the file was uploaded, false otherwise.
If verification is enabled (All options other than ) the hash will be checked against the server. If the server does not support
any hash algorithm, then verification is ignored. If only is set then the return of this method depends on both a successful
upload & verification. Additionally, if any verify option is set and a retry is attempted the existsMode will automatically be set to .
Uploads the specified file directly onto the server asynchronously.
High-level API that takes care of various edge cases internally.
Supports very large files since it uploads data in chunks.
The full or relative path to the file on the local file system
The full or relative path to the file on the server
What to do if the file already exists? Skip, overwrite or append? Set this to for fastest performance
but only if you are SURE that the files do not exist on the server.
Create the remote directory if it does not exist. Slows down upload due to additional checks required.
Sets if checksum verification is required for a successful upload and what to do if it fails verification (See Remarks)
If true then the file was uploaded, false otherwise.
If verification is enabled (All options other than ) the hash will be checked against the server. If the server does not support
any hash algorithm, then verification is ignored. If only is set then the return of this method depends on both a successful
upload & verification. Additionally, if any verify option is set and a retry is attempted the existsMode will automatically be set to .
Uploads the specified stream as a file onto the server.
High-level API that takes care of various edge cases internally.
Supports very large files since it uploads data in chunks.
The full data of the file, as a stream
The full or relative path to the file on the server
What to do if the file already exists? Skip, overwrite or append? Set this to for fastest performance
but only if you are SURE that the files do not exist on the server.
Create the remote directory if it does not exist. Slows down upload due to additional checks required.
Provide an implementation of IProgress to track upload progress. The value provided is in the range 0 to 100, indicating the percentage of the file transferred. If the progress is indeterminate, -1 is sent.
Uploads the specified byte array as a file onto the server.
High-level API that takes care of various edge cases internally.
Supports very large files since it uploads data in chunks.
The full data of the file, as a byte array
The full or relative path to the file on the server
What to do if the file already exists? Skip, overwrite or append? Set this to for fastest performance
but only if you are SURE that the files do not exist on the server.
Create the remote directory if it does not exist. Slows down upload due to additional checks required.
Provide an implementation of IProgress to track upload progress. The value provided is in the range 0 to 100, indicating the percentage of the file transferred. If the progress is indeterminate, -1 is sent.
Uploads the specified stream as a file onto the server asynchronously.
High-level API that takes care of various edge cases internally.
Supports very large files since it uploads data in chunks.
The full data of the file, as a stream
The full or relative path to the file on the server
What to do if the file already exists? Skip, overwrite or append? Set this to for fastest performance,
but only if you are SURE that the files do not exist on the server.
Create the remote directory if it does not exist. Slows down upload due to additional checks required.
The token to monitor for cancellation requests.
Provide an implementation of IProgress to track upload progress. The value provided is in the range 0 to 100, indicating the percentage of the file transferred. If the progress is indeterminate, -1 is sent.
If true then the file was uploaded, false otherwise.
Uploads the specified byte array as a file onto the server asynchronously.
High-level API that takes care of various edge cases internally.
Supports very large files since it uploads data in chunks.
The full data of the file, as a byte array
The full or relative path to the file on the server
What to do if the file already exists? Skip, overwrite or append? Set this to for fastest performance,
but only if you are SURE that the files do not exist on the server.
Create the remote directory if it does not exist. Slows down upload due to additional checks required.
The token to monitor for cancellation requests.
Provide an implementation of IProgress to track upload progress. The value provided is in the range 0 to 100, indicating the percentage of the file transferred. If the progress is indeterminate, -1 is sent.
If true then the file was uploaded, false otherwise.
Uploads the specified stream as a file onto the server asynchronously.
High-level API that takes care of various edge cases internally.
Supports very large files since it uploads data in chunks.
The full data of the file, as a stream
The full or relative path to the file on the server
What to do if the file already exists? Skip, overwrite or append? Set this to for fastest performance,
but only if you are SURE that the files do not exist on the server.
Create the remote directory if it does not exist. Slows down upload due to additional checks required.
If true then the file was uploaded, false otherwise.
Uploads the specified byte array as a file onto the server asynchronously.
High-level API that takes care of various edge cases internally.
Supports very large files since it uploads data in chunks.
The full data of the file, as a byte array
The full or relative path to the file on the server
What to do if the file already exists? Skip, overwrite or append? Set this to for fastest performance,
but only if you are SURE that the files do not exist on the server.
Create the remote directory if it does not exist. Slows down upload due to additional checks required.
If true then the file was uploaded, false otherwise.
Upload the given stream to the server as a new file. Overwrites the file if it exists.
Writes data in chunks. Retries if server disconnects midway.
Upload the given stream to the server as a new file asynchronously. Overwrites the file if it exists.
Writes data in chunks. Retries if server disconnects midway.
Downloads the specified file onto the local file system.
High-level API that takes care of various edge cases internally.
Supports very large files since it downloads data in chunks.
The full or relative path to the file on the local file system
The full or relative path to the file on the server
True if you want the local file to be overwritten if it already exists. (Default value is true)
Sets if checksum verification is required for a successful download and what to do if it fails verification (See Remarks)
Provide an implementation of IProgress to track download progress. The value provided is in the range 0 to 100, indicating the percentage of the file transferred. If the progress is indeterminate, -1 is sent.
If true then the file was downloaded, false otherwise.
If verification is enabled (All options other than ) the hash will be checked against the server. If the server does not support
any hash algorithm, then verification is ignored. If only is set then the return of this method depends on both a successful
upload & verification. Additionally, if any verify option is set and a retry is attempted then overwrite will automatically be set to true for subsequent attempts.
Downloads the specified file onto the local file system asynchronously.
High-level API that takes care of various edge cases internally.
Supports very large files since it downloads data in chunks.
The full or relative path to the file on the local file system
The full or relative path to the file on the server
True if you want the local file to be overwritten if it already exists. (Default value is true)
Sets if checksum verification is required for a successful download and what to do if it fails verification (See Remarks)
The token to monitor for cancellation requests
Provide an implementation of IProgress to track download progress. The value provided is in the range 0 to 100, indicating the percentage of the file transferred. If the progress is indeterminate, -1 is sent.
If true then the file was downloaded, false otherwise.
If verification is enabled (All options other than ) the hash will be checked against the server. If the server does not support
any hash algorithm, then verification is ignored. If only is set then the return of this method depends on both a successful
upload & verification. Additionally, if any verify option is set and a retry is attempted then overwrite will automatically be set to true for subsequent attempts.
Downloads the specified file onto the local file system asynchronously.
High-level API that takes care of various edge cases internally.
Supports very large files since it downloads data in chunks.
The full or relative path to the file on the local file system
The full or relative path to the file on the server
True if you want the local file to be overwritten if it already exists. (Default value is true)
Sets if checksum verification is required for a successful download and what to do if it fails verification (See Remarks)
Provide an implementation of IProgress to track download progress. The value provided is in the range 0 to 100, indicating the percentage of the file transferred. If the progress is indeterminate, -1 is sent.
If true then the file was downloaded, false otherwise.
If verification is enabled (All options other than ) the hash will be checked against the server. If the server does not support
any hash algorithm, then verification is ignored. If only is set then the return of this method depends on both a successful
upload & verification. Additionally, if any verify option is set and a retry is attempted then overwrite will automatically be set to true for subsequent attempts.
Downloads the specified file into the specified stream.
High-level API that takes care of various edge cases internally.
Supports very large files since it downloads data in chunks.
The stream that the file will be written to. Provide a new MemoryStream if you only want to read the file into memory.
The full or relative path to the file on the server
Provide an implementation of IProgress to track download progress. The value provided is in the range 0 to 100, indicating the percentage of the file transferred. If the progress is indeterminate, -1 is sent.
If true then the file was downloaded, false otherwise.
Downloads the specified file and return the raw byte array.
High-level API that takes care of various edge cases internally.
Supports very large files since it downloads data in chunks.
The variable that will receive the bytes.
The full or relative path to the file on the server
Provide an implementation of IProgress to track download progress. The value provided is in the range 0 to 100, indicating the percentage of the file transferred. If the progress is indeterminate, -1 is sent.
If true then the file was downloaded, false otherwise.
Downloads the specified file into the specified stream asynchronously .
High-level API that takes care of various edge cases internally.
Supports very large files since it downloads data in chunks.
The stream that the file will be written to. Provide a new MemoryStream if you only want to read the file into memory.
The full or relative path to the file on the server
The token to monitor cancellation requests
Provide an implementation of IProgress to track download progress. The value provided is in the range 0 to 100, indicating the percentage of the file transferred. If the progress is indeterminate, -1 is sent.
If true then the file was downloaded, false otherwise.
Downloads the specified file into the specified stream asynchronously .
High-level API that takes care of various edge cases internally.
Supports very large files since it downloads data in chunks.
The stream that the file will be written to. Provide a new MemoryStream if you only want to read the file into memory.
The full or relative path to the file on the server
If true then the file was downloaded, false otherwise.
Downloads the specified file and return the raw byte array.
High-level API that takes care of various edge cases internally.
Supports very large files since it downloads data in chunks.
The full or relative path to the file on the server
The token to monitor cancellation requests
Provide an implementation of IProgress to track download progress. The value provided is in the range 0 to 100, indicating the percentage of the file transferred. If the progress is indeterminate, -1 is sent.
A byte array containing the contents of the downloaded file if successful, otherwise null.
Downloads the specified file into the specified stream asynchronously .
High-level API that takes care of various edge cases internally.
Supports very large files since it downloads data in chunks.
The full or relative path to the file on the server
A byte array containing the contents of the downloaded file if successful, otherwise null.
Download a file from the server and write the data into the given stream.
Reads data in chunks. Retries if server disconnects midway.
Download a file from the server and write the data into the given stream asynchronously.
Reads data in chunks. Retries if server disconnects midway.
Sends progress to the user, either a value between 0-100 indicating percentage complete, or -1 for indeterminate.
File listing parser to be used.
Automatically calculated based on the type of the server, unless changed.
Culture used to parse file listings
Time difference between server and client, in hours.
If the server is located in New York and you are in London then the time difference is -5 hours.
Detect if your FTP server supports the recursive LIST command (LIST -R).
If you know for sure that this is supported, return true here.
If true, increases performance of GetListing by reading multiple lines
of the file listing at once. If false then GetListing will read file
listings line-by-line. If GetListing is having issues with your server,
set it to false.
The number of bytes read is based upon .
Bytes to read during GetListing. Only honored if is true.
Returns information about a file system object. Returns null if the server response can't
be parsed or the server returns a failure completion code. The error for a failure
is logged with FtpTrace. No exception is thrown on error because that would negate
the usefulness of this method for checking for the existence of an object.
The path of the file or folder
Get the accurate modified date using another MDTM command
A FtpListItem object
Begins an asynchronous operation to return information about a remote file system object.
You should check the property for the
flag before calling this method. Failing to do so will result in an InvalidOperationException
being thrown when the server does not support machine listings. Returns null if the server response can't
be parsed or the server returns a failure completion code. The error for a failure
is logged with FtpTrace. No exception is thrown on error because that would negate
the usefulness of this method for checking for the existence of an object.
Path of the file or folder
Get the accurate modified date using another MDTM command
Async Callback
State object
IAsyncResult
Ends a call to
IAsyncResult returned from
A if the command succeeded, or null if there was a problem.
Return information about a remote file system object asynchronously.
You should check the property for the
flag before calling this method. Failing to do so will result in an InvalidOperationException
being thrown when the server does not support machine listings. Returns null if the server response can't
be parsed or the server returns a failure completion code. The error for a failure
is logged with FtpTrace. No exception is thrown on error because that would negate
the usefulness of this method for checking for the existence of an object.
Path of the item to retrieve information about
Get the accurate modified date using another MDTM command
Thrown if the server does not support this Capability
A if the command succeeded, or null if there was a problem.
Gets a file listing from the server from the current working directory. Each object returned
contains information about the file that was able to be retrieved.
If a property is equal to then it means the
date in question was not able to be retrieved. If the property
is equal to 0, then it means the size of the object could also not
be retrieved.
An array of FtpListItem objects
Gets a file listing from the server. Each object returned
contains information about the file that was able to be retrieved.
If a property is equal to then it means the
date in question was not able to be retrieved. If the property
is equal to 0, then it means the size of the object could also not
be retrieved.
The path of the directory to list
An array of FtpListItem objects
Gets a file listing from the server. Each object returned
contains information about the file that was able to be retrieved.
If a property is equal to then it means the
date in question was not able to be retrieved. If the property
is equal to 0, then it means the size of the object could also not
be retrieved.
The path of the directory to list
Options that dictacte how a list is performed and what information is gathered.
An array of FtpListItem objects
Begins an asynchronous operation to get a file listing from the server.
Each object returned contains information about the file that was able to be retrieved.
If a property is equal to then it means the
date in question was not able to be retrieved. If the property
is equal to 0, then it means the size of the object could also not
be retrieved.
AsyncCallback method
State object
IAsyncResult
Begins an asynchronous operation to get a file listing from the server.
Each object returned contains information about the file that was able to be retrieved.
If a property is equal to then it means the
date in question was not able to be retrieved. If the property
is equal to 0, then it means the size of the object could also not
be retrieved.
The path to list
AsyncCallback method
State object
IAsyncResult
Gets a file listing from the server asynchronously
The path to list
Options that dictate how the list operation is performed
AsyncCallback method
State object
IAsyncResult
Ends a call to
IAsyncResult return from
An array of items retrieved in the listing
Gets a file listing from the server asynchronously. Each object returned
contains information about the file that was able to be retrieved.
If a property is equal to then it means the
date in question was not able to be retrieved. If the property
is equal to 0, then it means the size of the object could also not
be retrieved.
The path to list
Options that dictate how the list operation is performed
An array of items retrieved in the listing
Gets a file listing from the server asynchronously. Each object returned
contains information about the file that was able to be retrieved.
If a property is equal to then it means the
date in question was not able to be retrieved. If the property
is equal to 0, then it means the size of the object could also not
be retrieved.
The path to list
An array of items retrieved in the listing
Gets a file listing from the server asynchronously. Each object returned
contains information about the file that was able to be retrieved.
If a property is equal to then it means the
date in question was not able to be retrieved. If the property
is equal to 0, then it means the size of the object could also not
be retrieved.
An array of items retrieved in the listing
Recursive method of GetListing, to recurse through directories on servers that do not natively support recursion.
Automatically called by GetListing where required.
Uses flat recursion instead of head recursion.
The path of the directory to list
Options that dictacte how a list is performed and what information is gathered.
An array of FtpListItem objects
Recursive method of GetListingAsync, to recurse through directories on servers that do not natively support recursion.
Automatically called by GetListingAsync where required.
Uses flat recursion instead of head recursion.
The path of the directory to list
Options that dictacte how a list is performed and what information is gathered.
An array of FtpListItem objects
Returns a file/directory listing using the NLST command.
A string array of file and directory names if any were returned.
Returns a file/directory listing using the NLST command.
The path of the directory to list
A string array of file and directory names if any were returned.
Begin an asynchronous operation to return a file/directory listing using the NLST command.
The path of the directory to list
Async Callback
State object
IAsyncResult
Begin an asynchronous operation to return a file/directory listing using the NLST command.
Async Callback
State object
IAsyncResult
Ends a call to
IAsyncResult object returned from
An array of file and directory names if any were returned.
Returns a file/directory listing using the NLST command asynchronously
The path of the directory to list
An array of file and directory names if any were returned.
Returns a file/directory listing using the NLST command asynchronously
An array of file and directory names if any were returned.
Opens the specified type of passive data stream
Type of passive data stream to open
The command to execute that requires a data stream
Restart location in bytes for file transfer
A data stream ready to be used
Opens the specified type of passive data stream
Type of passive data stream to open
The command to execute that requires a data stream
Restart location in bytes for file transfer
A data stream ready to be used
Returns the ip address to be sent to the server for the active connection
Opens the specified type of active data stream
Type of passive data stream to open
The command to execute that requires a data stream
Restart location in bytes for file transfer
A data stream ready to be used
Opens the specified type of active data stream
Type of passive data stream to open
The command to execute that requires a data stream
Restart location in bytes for file transfer
A data stream ready to be used
Opens a data stream.
The command to execute that requires a data stream
Restart location in bytes for file transfer
The data stream.
Opens a data stream.
The command to execute that requires a data stream
Restart location in bytes for file transfer
The data stream.
Disconnects a data stream
The data stream to close
Opens the specified file for reading
The full or relative path of the file
A stream for reading the file on the server
Opens the specified file for reading
The full or relative path of the file
ASCII/Binary
A stream for reading the file on the server
Opens the specified file for reading
The full or relative path of the file
ASCII/Binary
Only set this to false if you are SURE that the file does not exist. If true, it reads the file size and saves it into the stream length.
A stream for reading the file on the server
Opens the specified file for reading
The full or relative path of the file
ASCII/Binary
Resume location
A stream for reading the file on the server
Opens the specified file for reading
The full or relative path of the file
Resume location
A stream for reading the file on the server
Opens the specified file for reading
The full or relative path of the file
Resume location
Only set this to false if you are SURE that the file does not exist. If true, it reads the file size and saves it into the stream length.
A stream for reading the file on the server
Opens the specified file for reading
The full or relative path of the file
ASCII/Binary
Resume location
Only set this to false if you are SURE that the file does not exist. If true, it reads the file size and saves it into the stream length.
A stream for reading the file on the server
Begins an asynchronous operation to open the specified file for reading
The full or relative path of the file
Async Callback
State object
IAsyncResult
Opens the specified file for reading
The full or relative path of the file
ASCII/Binary
Async Callback
State object
IAsyncResult
Begins an asynchronous operation to open the specified file for reading
The full or relative path of the file
Resume location
Async Callback
State object
IAsyncResult
Begins an asynchronous operation to open the specified file for reading
The full or relative path of the file
ASCII/Binary
Resume location
Async Callback
State object
IAsyncResult
Ends a call to
returned from
A readable stream of the remote file
Opens the specified file for reading asynchronously
The full or relative path of the file
ASCII/Binary
Resume location
Only set this to false if you are SURE that the file does not exist. If true, it reads the file size and saves it into the stream length.
A stream for reading the file on the server
Opens the specified file for reading asynchronously
The full or relative path of the file
ASCII/Binary
Resume location
A readable stream of the remote file
Opens the specified file for reading asynchronously
The full or relative path of the file
ASCII/Binary
A readable stream of the remote file
Opens the specified file for reading asynchronously
The full or relative path of the file
Resume location
A readable stream of the remote file
Opens the specified file for reading asynchronously
The full or relative path of the file
A readable stream of the remote file
Opens the specified file for writing. Please call GetReply() after you have successfully transfered the file to read the "OK" command sent by the server and prevent stale data on the socket.
Full or relative path of the file
A stream for writing to the file on the server
Opens the specified file for writing. Please call GetReply() after you have successfully transfered the file to read the "OK" command sent by the server and prevent stale data on the socket.
Full or relative path of the file
ASCII/Binary
A stream for writing to the file on the server
Opens the specified file for writing. Please call GetReply() after you have successfully transfered the file to read the "OK" command sent by the server and prevent stale data on the socket.
Full or relative path of the file
ASCII/Binary
Only set this to false if you are SURE that the file does not exist. If true, it reads the file size and saves it into the stream length.
A stream for writing to the file on the server
Begins an asynchronous operation to open the specified file for writing
Full or relative path of the file
Async callback
State object
IAsyncResult
Begins an asynchronous operation to open the specified file for writing
Full or relative path of the file
ASCII/Binary
Async callback
State object
IAsyncResult
Ends a call to
returned from
A writable stream
Opens the specified file for writing. Please call GetReply() after you have successfully transfered the file to read the "OK" command sent by the server and prevent stale data on the socket.
Full or relative path of the file
ASCII/Binary
Only set this to false if you are SURE that the file does not exist. If true, it reads the file size and saves it into the stream length.
A stream for writing to the file on the server
Opens the specified file for writing. Please call GetReply() after you have successfully transfered the file to read the "OK" command sent by the server and prevent stale data on the socket. asynchronously
Full or relative path of the file
ASCII/Binary
A stream for writing to the file on the server
Opens the specified file for writing. Please call GetReply() after you have successfully transfered the file to read the "OK" command sent by the server and prevent stale data on the socket. asynchronously
Full or relative path of the file
A stream for writing to the file on the server
Opens the specified file for appending. Please call GetReply() after you have successfully transfered the file to read the "OK" command sent by the server and prevent stale data on the socket.
The full or relative path to the file to be opened
A stream for writing to the file on the server
Opens the specified file for appending. Please call GetReply() after you have successfully transfered the file to read the "OK" command sent by the server and prevent stale data on the socket.
The full or relative path to the file to be opened
ASCII/Binary
Only set this to false if you are SURE that the file does not exist. If true, it reads the file size and saves it into the stream length.
A stream for writing to the file on the server
Opens the specified file for appending. Please call GetReply() after you have successfully transfered the file to read the "OK" command sent by the server and prevent stale data on the socket.
The full or relative path to the file to be opened
ASCII/Binary
Only set this to false if you are SURE that the file does not exist. If true, it reads the file size and saves it into the stream length.
A stream for writing to the file on the server
Begins an asynchronous operation to open the specified file for appending
Full or relative path of the file
Async callback
State object
IAsyncResult
Begins an asynchronous operation to open the specified file for appending
Full or relative path of the file
ASCII/Binary
Async callback
State object
IAsyncResult
Ends a call to
returned from
A writable stream
Opens the specified file to be appended asynchronously
Full or relative path of the file
ASCII/Binary
Only set this to false if you are SURE that the file does not exist. If true, it reads the file size and saves it into the stream length.
A stream for writing to the file on the server
Opens the specified file to be appended asynchronously
Full or relative path of the file
ASCII/Binary
A stream for writing to the file on the server
Opens the specified file to be appended asynchronously
Full or relative path of the file
A stream for writing to the file on the server
Sets the data type of information sent over the data stream
ASCII/Binary
Internal method that handles actually setting the data type.
Thrown when a FTP Command error condition occurs.
Thrown when a FTP error condition occurs.
ASCII/Binary.
This method doesn't do any locking to prevent recursive lock scenarios. Callers must do their own locking.
Begins an asynchronous operation to set the data type of information sent over the data stream
ASCII/Binary
Async callback
State object
IAsyncResult
Ends a call to
IAsyncResult returned from
Sets the data type of information sent over the data stream asynchronously
ASCII/Binary
Deletes a file on the server
The full or relative path to the file
Begins an asynchronous operation to delete the specified file on the server
The full or relative path to the file
Async callback
State object
IAsyncResult
Ends a call to
IAsyncResult returned from BeginDeleteFile
Deletes a file from the server asynchronously
The full or relative path to the file
Deletes the specified directory and all its contents.
The full or relative path of the directory to delete
Deletes the specified directory and all its contents.
The full or relative path of the directory to delete
Useful to delete hidden files or dot-files.
Deletes the specified directory and all its contents.
The full or relative path of the directory to delete
If the directory is not empty, remove its contents
Useful to delete hidden files or dot-files.
Checks whether will be called recursively or not.
Begins an asynchronous operation to delete the specified directory and all its contents.
The full or relative path of the directory to delete
Async callback
State object
IAsyncResult
Begins an asynchronous operation to delete the specified directory and all its contents.
The full or relative path of the directory to delete
Useful to delete hidden files or dot-files.
Async callback
State object
IAsyncResult
Ends a call to
IAsyncResult returned from BeginDeleteDirectory
Asynchronously removes a directory and all its contents.
The full or relative path of the directory to delete
Asynchronously removes a directory and all its contents.
The full or relative path of the directory to delete
Useful to delete hidden files or dot-files.
Asynchronously removes a directory. Used by and
.
The full or relative path of the directory to delete
Delete the contents before deleting the folder
Useful to delete hidden files or dot-files.
Tests if the specified directory exists on the server. This
method works by trying to change the working directory to
the path specified. If it succeeds, the directory is changed
back to the old working directory and true is returned. False
is returned otherwise and since the CWD failed it is assumed
the working directory is still the same.
The path of the directory
True if it exists, false otherwise.
Begins an asynchronous operation to test if the specified directory exists on the server.
This method works by trying to change the working directory to
the path specified. If it succeeds, the directory is changed
back to the old working directory and true is returned. False
is returned otherwise and since the CWD failed it is assumed
the working directory is still the same.
IAsyncResult
The full or relative path of the directory to check for
Async callback
State object
Ends a call to
IAsyncResult returned from BeginDirectoryExists
True if the directory exists. False otherwise.
Tests if the specified directory exists on the server asynchronously. This
method works by trying to change the working directory to
the path specified. If it succeeds, the directory is changed
back to the old working directory and true is returned. False
is returned otherwise and since the CWD failed it is assumed
the working directory is still the same.
The full or relative path of the directory to check for
True if the directory exists. False otherwise.
Checks if a file exists on the server.
The full or relative path to the file
True if the file exists
Begins an asynchronous operation to check if a file exists on the
server by taking a file listing of the parent directory in the path
and comparing the results the path supplied.
The full or relative path to the file
Async callback
State object
IAsyncResult
Ends a call to
IAsyncResult returned from
True if the file exists, false otherwise
Checks if a file exists on the server asynchronously.
The full or relative path to the file
True if the file exists, false otherwise
Creates a directory on the server. If the preceding
directories do not exist, then they are created.
The full or relative path to the new remote directory
Creates a directory on the server
The full or relative path to the new remote directory
Try to force all non-existent pieces of the path to be created
Begins an asynchronous operation to create a remote directory. If the preceding
directories do not exist, then they are created.
The full or relative path to the new remote directory
Async callback
State object
IAsyncResult
Begins an asynchronous operation to create a remote directory
The full or relative path to the new remote directory
Try to create the whole path if the preceding directories do not exist
Async callback
State object
IAsyncResult
Ends a call to
IAsyncResult returned from
Creates a remote directory asynchronously
The full or relative path to the new remote directory
Try to create the whole path if the preceding directories do not exist
Creates a remote directory asynchronously. If the preceding
directories do not exist, then they are created.
The full or relative path to the new remote directory
Renames an object on the remote file system.
Low level method that should NOT be used in most cases. Prefer MoveFile() and MoveDirectory().
Throws exceptions if the file does not exist, or if the destination file already exists.
The full or relative path to the object
The new full or relative path including the new name of the object
Begins an asynchronous operation to rename an object on the remote file system.
Low level method that should NOT be used in most cases. Prefer MoveFile() and MoveDirectory().
Throws exceptions if the file does not exist, or if the destination file already exists.
The full or relative path to the object
The new full or relative path including the new name of the object
Async callback
State object
IAsyncResult
Ends a call to
IAsyncResult returned from
Renames an object on the remote file system asynchronously.
Low level method that should NOT be used in most cases. Prefer MoveFile() and MoveDirectory().
Throws exceptions if the file does not exist, or if the destination file already exists.
The full or relative path to the object
The new full or relative path including the new name of the object
Moves a file on the remote file system from one directory to another.
Always checks if the source file exists. Checks if the dest file exists based on the `existsMode` parameter.
Only throws exceptions for critical errors.
The full or relative path to the object
The new full or relative path including the new name of the object
Should we check if the dest file exists? And if it does should we overwrite/skip the operation?
Whether the file was moved
Begins an asynchronous operation to move a file on the remote file system, from one directory to another.
Always checks if the source file exists. Checks if the dest file exists based on the `existsMode` parameter.
Only throws exceptions for critical errors.
The full or relative path to the object
The new full or relative path including the new name of the object
Should we check if the dest file exists? And if it does should we overwrite/skip the operation?
Async callback
State object
IAsyncResult
Ends a call to
IAsyncResult returned from
Moves a file asynchronously on the remote file system from one directory to another.
Always checks if the source file exists. Checks if the dest file exists based on the `existsMode` parameter.
Only throws exceptions for critical errors.
The full or relative path to the object
The new full or relative path including the new name of the object
Should we check if the dest file exists? And if it does should we overwrite/skip the operation?
Whether the file was moved
Moves a directory on the remote file system from one directory to another.
Always checks if the source directory exists. Checks if the dest directory exists based on the `existsMode` parameter.
Only throws exceptions for critical errors.
The full or relative path to the object
The new full or relative path including the new name of the object
Should we check if the dest directory exists? And if it does should we overwrite/skip the operation?
Whether the directory was moved
Begins an asynchronous operation to move a directory on the remote file system, from one directory to another.
Always checks if the source directory exists. Checks if the dest directory exists based on the `existsMode` parameter.
Only throws exceptions for critical errors.
The full or relative path to the object
The new full or relative path including the new name of the object
Should we check if the dest directory exists? And if it does should we overwrite/skip the operation?
Async callback
State object
IAsyncResult
Ends a call to
IAsyncResult returned from
Moves a directory asynchronously on the remote file system from one directory to another.
Always checks if the source directory exists. Checks if the dest directory exists based on the `existsMode` parameter.
Only throws exceptions for critical errors.
The full or relative path to the object
The new full or relative path including the new name of the object
Should we check if the dest directory exists? And if it does should we overwrite/skip the operation?
Whether the directory was moved
Modify the permissions of the given file/folder.
Only works on *NIX systems, and not on Windows/IIS servers.
Only works if the FTP server supports the SITE CHMOD command
(requires the CHMOD extension to be installed and enabled).
Throws FtpCommandException if there is an issue.
The full or relative path to the item
The permissions in CHMOD format
Modify the permissions of the given file/folder.
Only works on *NIX systems, and not on Windows/IIS servers.
Only works if the FTP server supports the SITE CHMOD command
(requires the CHMOD extension to be installed and enabled).
Throws FtpCommandException if there is an issue.
The full or relative path to the item
The permissions in CHMOD format
Modify the permissions of the given file/folder.
Only works on *NIX systems, and not on Windows/IIS servers.
Only works if the FTP server supports the SITE CHMOD command
(requires the CHMOD extension to be installed and enabled).
Throws FtpCommandException if there is an issue.
The full or relative path to the item
The permissions in CHMOD format
Modify the permissions of the given file/folder.
Only works on *NIX systems, and not on Windows/IIS servers.
Only works if the FTP server supports the SITE CHMOD command
(requires the CHMOD extension to be installed and enabled).
Throws FtpCommandException if there is an issue.
The full or relative path to the item
The permissions in CHMOD format
Modify the permissions of the given file/folder.
Only works on *NIX systems, and not on Windows/IIS servers.
Only works if the FTP server supports the SITE CHMOD command
(requires the CHMOD extension to be installed and enabled).
Throws FtpCommandException if there is an issue.
The full or relative path to the item
The owner permissions
The group permissions
The other permissions
Modify the permissions of the given file/folder.
Only works on *NIX systems, and not on Windows/IIS servers.
Only works if the FTP server supports the SITE CHMOD command
(requires the CHMOD extension to be installed and enabled).
Throws FtpCommandException if there is an issue.
The full or relative path to the item
The owner permissions
The group permissions
The other permissions
Modify the permissions of the given file/folder.
Only works on *NIX systems, and not on Windows/IIS servers.
Only works if the FTP server supports the SITE CHMOD command
(requires the CHMOD extension to be installed and enabled).
Throws FtpCommandException if there is an issue.
The full or relative path to the item
The owner permissions
The group permissions
The other permissions
Modify the permissions of the given file/folder.
Only works on *NIX systems, and not on Windows/IIS servers.
Only works if the FTP server supports the SITE CHMOD command
(requires the CHMOD extension to be installed and enabled).
Throws FtpCommandException if there is an issue.
The full or relative path to the item
The owner permissions
The group permissions
The other permissions
Retrieve the permissions of the given file/folder as an FtpListItem object with all "Permission" properties set.
Throws FtpCommandException if there is an issue.
Returns null if the server did not specify a permission value.
Use `GetChmod` if you required the integer value instead.
The full or relative path to the item
Retrieve the permissions of the given file/folder as an FtpListItem object with all "Permission" properties set.
Throws FtpCommandException if there is an issue.
Returns null if the server did not specify a permission value.
Use `GetChmod` if you required the integer value instead.
The full or relative path to the item
Retrieve the permissions of the given file/folder as an integer in the CHMOD format.
Throws FtpCommandException if there is an issue.
Returns 0 if the server did not specify a permission value.
Use `GetFilePermissions` if you required the permissions in the FtpPermission format.
The full or relative path to the item
Retrieve the permissions of the given file/folder as an integer in the CHMOD format.
Throws FtpCommandException if there is an issue.
Returns 0 if the server did not specify a permission value.
Use `GetFilePermissions` if you required the permissions in the FtpPermission format.
The full or relative path to the item
Recursively dereferences a symbolic link. See the
MaximumDereferenceCount property for controlling
how deep this method will recurse before giving up.
The symbolic link
FtpListItem, null if the link can't be dereferenced
Recursively dereferences a symbolic link
The symbolic link
The maximum depth of recursion that can be performed before giving up.
FtpListItem, null if the link can't be dereferenced
Derefence a FtpListItem object
The item to derefence
Maximum recursive calls
Counter
FtpListItem, null if the link can't be dereferenced
Begins an asynchronous operation to dereference a object
The item to dereference
Maximum recursive calls
AsyncCallback
State Object
IAsyncResult
Begins an asynchronous operation to dereference a object. See the
property for controlling
how deep this method will recurse before giving up.
The item to dereference
AsyncCallback
State Object
IAsyncResult
Ends a call to
IAsyncResult
A , or null if the link can't be dereferenced
Derefence a FtpListItem object
The item to derefence
Maximum recursive calls
Counter
FtpListItem, null if the link can't be dereferenced
Dereference a object asynchronously
The item to dereference
Maximum recursive calls
FtpListItem, null if the link can't be dereferenced
Dereference a object asynchronously
The item to dereference
FtpListItem, null if the link can't be dereferenced
Sets the work directory on the server
The path of the directory to change to
Begins an asynchronous operation to set the working directory on the server
The directory to change to
Async Callback
State object
IAsyncResult
Ends a call to
IAsyncResult returned from
Sets the working directory on the server asynchronously
The directory to change to
Gets the current working directory
The current working directory, ./ if the response couldn't be parsed.
Begins an asynchronous operation to get the working directory
Async callback
State object
IAsyncResult
Ends a call to
IAsyncResult returned from
The current working directory
Gets the current working directory asynchronously
The current working directory, ./ if the response couldn't be parsed.
Gets the size of a remote file
The full or relative path of the file
-1 if the command fails, otherwise the file size
Begins an asynchronous operation to retrieve the size of a remote file
The full or relative path of the file
Async callback
State object
IAsyncResult
Ends a call to
IAsyncResult returned from
The size of the file, -1 if there was a problem.
Retrieve the size of a remote file asynchronously
The full or relative path of the file
The size of the file, -1 if there was a problem.
Gets the modified time of a remote file
The full path to the file
Return the date in local timezone or UTC? Use FtpDate.Original to disable timezone conversion.
The modified time, or if there was a problem
Begins an asynchronous operation to get the modified time of a remote file
The full path to the file
Return the date in local timezone or UTC? Use FtpDate.Original to disable timezone conversion.
Async callback
State object
IAsyncResult
Ends a call to
IAsyncResult returned from
The modified time, or if there was a problem
Gets the modified time of a remote file asynchronously
The full path to the file
Return the date in local timezone or UTC? Use FtpDate.Original to disable timezone conversion.
The modified time, or if there was a problem
Changes the modified time of a remote file
The full path to the file
The new modified date/time value
Is the date provided in local timezone or UTC? Use FtpDate.Original to disable timezone conversion.
Begins an asynchronous operation to get the modified time of a remote file
The full path to the file
The new modified date/time value
Is the date provided in local timezone or UTC? Use FtpDate.Original to disable timezone conversion.
Async callback
State object
IAsyncResult
Ends a call to
IAsyncResult returned from
The modified time, or if there was a problem
Gets the modified time of a remote file asynchronously
The full path to the file
The new modified date/time value
Is the date provided in local timezone or UTC? Use FtpDate.Original to disable timezone conversion.
Interface for the FtpClient class. For detailed documentation of the methods, please see the FtpClient class.
Defines the type of encryption to use
Plain text.
FTPS encryption is used from the start of the connection, port 990.
Connection starts in plain text and FTPS encryption is enabled
with the AUTH command immediately after the server greeting.
The type of response the server responded with
No response
Success
Success
Success
Temporary failure
Permanent failure
Server features
This server said it doesn't support anything!
Supports the MLST command
Supports the SIZE command
Supports the MDTM command
Supports download/upload stream resumes
Supports UTF8
PRET Command used in distributed ftp server software DrFTPD
Server supports the MFMT command for setting the
modified date of an object on the server
Server supports the MFCT command for setting the
created date of an object on the server
Server supports the MFF command for setting certain facts
about file system objects. If you need this command, it would
probably be handy to query FEAT your self and have a look at
the FtpReply.InfoMessages property to see which facts the server
allows you to modify.
Server supports the STAT command
Support for the HASH command
Support for the non-standard MD5 command
Support for the non-standard XMD5 command
Support for the non-standard XCRC command
Support for the non-standard XSHA1 command
Support for the non-standard XSHA256 command
Support for the non-standard XSHA512 command
Different types of hashing algorithms for computing checksums.
HASH command is not supported
SHA-1
SHA-256
SHA-512
MD5
CRC
IP Versions to allow when connecting
to a server.
Internet Protocol Version 4
Internet Protocol Version 6
Allow any supported version
Data connection type
This type of data connection attempts to use the EPSV command
and if the server does not support EPSV it falls back to the
PASV command before giving up unless you are connected via IPv6
in which case the PASV command is not supported.
Passive data connection. EPSV is a better
option if it's supported. Passive connections
connect to the IP address dictated by the server
which may or may not be accessible by the client
for example a server behind a NAT device may
give an IP address on its local network that
is inaccessible to the client. Please note that IPv6
does not support this type data connection. If you
ask for PASV and are connected via IPv6 EPSV will
automatically be used in its place.
Same as PASV except the host supplied by the server is ignored
and the data connection is made to the same address that the control
connection is connected to. This is useful in scenarios where the
server supplies a private/non-routable network address in the
PASV response. It's functionally identical to EPSV except some
servers may not implement the EPSV command. Please note that IPv6
does not support this type data connection. If you
ask for PASV and are connected via IPv6 EPSV will
automatically be used in its place.
Extended passive data connection, recommended. Works
the same as a PASV connection except the server
does not dictate an IP address to connect to, instead
the passive connection goes to the same address used
in the control connection. This type of data connection
supports IPv4 and IPv6.
This type of data connection attempts to use the EPRT command
and if the server does not support EPRT it falls back to the
PORT command before giving up unless you are connected via IPv6
in which case the PORT command is not supported.
Active data connection, not recommended unless
you have a specific reason for using this type.
Creates a listening socket on the client which
requires firewall exceptions on the client system
as well as client network when connecting to a
server outside of the client's network. In addition
the IP address of the interface used to connect to the
server is the address the server is told to connect to
which, if behind a NAT device, may be inaccessible to
the server. This type of data connection is not supported
by IPv6. If you specify PORT and are connected via IPv6
EPRT will automatically be used instead.
Extended active data connection, not recommended
unless you have a specific reason for using this
type. Creates a listening socket on the client
which requires firewall exceptions on the client
as well as client network when connecting to a
server outside of the client's network. The server
connects to the IP address it sees the client coming
from. This type of data connection supports IPv4 and IPv6.
Type of data transfer to do
ASCII transfer
Binary transfer
Type of file system of object
A file
A directory
A symbolic link
Types of file permissions
No access
Executable
Writable
Readable
Types of special UNIX permissions
No special permissions are set
Sticky bit is set
SGID bit is set
SUID bit is set
The type of response the server responded with
Use the legacy parser (for older projects that depend on the pre-2017 parser routines).
Automatically detect the file listing parser to use based on the FTP server (SYST command).
Machine listing parser, works on any FTP server supporting the MLST/MLSD commands.
File listing parser for Windows/IIS.
File listing parser for Unix.
Alternate parser for Unix. Use this if the default one does not work.
File listing parser for Vax/VMS/OpenVMS.
File listing parser for IBM OS400.
File listing parser for Tandem/Nonstop Guardian OS.
Flags that can dictate how a file listing is performed
Tries machine listings (MDTM command) if supported,
and if not then falls back to OS-specific listings (LIST command)
Load the modify date using MDTM when it could not
be parsed from the server listing. This only pertains
to servers that do not implement the MLSD command.
Load the file size using the SIZE command when it
could not be parsed from the server listing. This
only pertains to servers that do not support the
MLSD command.
Combines the Modify and Size flags
Show hidden/dot files. This only pertains to servers
that do not support the MLSD command. This option
makes use the non standard -a parameter to LIST to
tell the server to show hidden files. Since it's a
non-standard option it may not always work. MLSD listings
have no such option and whether or not a hidden file is
shown is at the discretion of the server.
Force the use of OS-specific listings (LIST command) even if
machine listings (MLSD command) are supported by the server
Use the NLST command instead of LIST for a reliable file listing
Force the use of the NLST command (the slowest mode) even if machine listings
and OS-specific listings are supported by the server
Try to dereference symbolic links, and stored the linked file/directory in FtpListItem.LinkObject
Sets the ForceList flag and uses `LS' instead of `LIST' as the
command for getting a directory listing. This option overrides
ForceNameList and ignores the AllFiles flag.
Gets files within subdirectories as well. Adds the -r option to the LIST command.
Some servers may not support this feature.
Do not retrieve path when no path is supplied to GetListing(),
instead just execute LIST with no path argument.
Include two extra items into the listing, for the current directory (".")
and the parent directory (".."). Meaningless unless you want these two
items for some reason.
Defines the behavior for uploading/downloading files that already exist
Do not check if the file exists. A bit faster than the other options. Only use this if you are SURE that the file does not exist on the server.
Otherwise it can cause the UploadFile method to hang due to filesize mismatch.
Skip the file if it exists, without any more checks.
Overwrite the file if it exists.
Append to the file if it exists, by checking the length and adding the missing data.
Append to the file, but don't check if it exists and add missing data. This might be required if you don't have permissions on the server to list files in the folder.
Only use this if you are SURE that the file does not exist on the server otherwise it can cause the UploadFile method to hang due to filesize mismatch.
Defines the level of the tracing message. Depending on the framework version this is translated
to an equivalent logging level in System.Diagnostices (if available)
Used for logging Debug or Verbose level messages
Used for logging Informational messages
Used for logging non-fatal or ignorable error messages
Used for logging Error messages that may need investigation
Defines how multi-file processes should handle a processing error.
& Cannot Be Combined
No action is taken upon errors. The method absorbs the error and continues.
If any files have completed successfully (or failed after a partial download/upload) then should be deleted.
This will simulate an all-or-nothing transaction downloading or uploading multiple files. If this option is not
combined with or then the method will
continue to process all items whether if they are successful or not and then delete everything if a failure was
encountered at any point.
The method should stop processing any additional files and immediately return upon encountering an error.
Cannot be combined with
The method should stop processing any additional files and immediately throw the current error.
Cannot be combined with
Defines if additional verification and actions upon failure that
should be performed when uploading/downloading files using the high-level APIs. Ignored if the
FTP server does not support any hashing algorithms.
No verification of the file is performed
The checksum of the file is verified, if supported by the server.
If the checksum comparison fails then we retry the download/upload
a specified amount of times before giving up. (See )
The checksum of the file is verified, if supported by the server.
If the checksum comparison fails then the failed file will be deleted.
If combined with , then
the deletion will occur if it fails upon the final retry.
The checksum of the file is verified, if supported by the server.
If the checksum comparison fails then an exception will be thrown.
If combined with , then the throw will
occur upon the failure of the final retry, and/or if combined with
the method will throw after the deletion is processed.
The checksum of the file is verified, if supported by the server.
If the checksum comparison fails then the method returns false and no other action is taken.
Defines if additional verification and actions upon failure that
should be performed when uploading/downloading files using the high-level APIs. Ignored if the
FTP server does not support any hashing algorithms.
The date is whatever the server returns, with no conversion performed.
The date is converted to the local timezone, based on the TimeOffset property in FtpClient.
The date is converted to UTC, based on the TimeOffset property in FtpClient.
Defines the type of the FTP server software.
Add constants here as you add detection scripts for individual server types.
Unknown FTP server software
Definitely PureFTPd server
Definitely VsFTPd server
Definitely ProFTPD server
Definitely FileZilla server
Definitely OpenVMS server
Definitely WindowsCE server
Definitely WuFTPd server
Event is fired when a SSL certificate needs to be validated
The control connection that triggered the event
Event args
Event fired if a bad SSL certificate is encountered. This even is used internally; if you
don't have a specific reason for using it you are probably looking for FtpSslValidation.
Event args for the FtpSslValidationError delegate
The certificate to be validated
The certificate chain
Validation errors, if any.
Gets or sets a value indicating if this certificate should be accepted. The default
value is false. If the certificate is not accepted, an AuthenticationException will
be thrown.
FTP related error
Initializes a new instance of the class.
The error message
Initializes a new instance of the class with an inner exception.
The error message that explains the reason for the exception.
The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.
Must be implemented so every Serializer can Deserialize the Exception
Exception triggered on command failures
Gets the completion code associated with the response
The type of response received from the last command executed
Initializes a new instance of a FtpResponseException
Status code
Associated message
Initializes a new instance of a FtpResponseException
The FtpReply to build the exception from
Must be implemented so every Serializer can Deserialize the Exception
Exception is thrown when encryption could not be negotiated by the server
Default constructor
Custom error message
Error message
Must be implemented so every Serializer can Deserialize the Exception
Represents a computed hash of an object
on the FTP server. See the following link
for more information:
http://tools.ietf.org/html/draft-bryan-ftpext-hash-02
Gets the algorithm that was used to compute the hash
Gets the computed hash returned by the server
Gets a value indicating if this object represents a
valid hash response from the server.
Computes the hash for the specified file and compares
it to the value in this object. CRC hashes are not supported
because there is no built-in support in the .net framework and
a CRC implementation exceeds the scope of this project. If you
attempt to call this on a CRC hash a will
be thrown.
The file to compute the hash for
True if the computed hash matches what's stored in this object.
Thrown if called on a CRC Hash
Computes the hash for the specified stream and compares
it to the value in this object. CRC hashes are not supported
because there is no built-in support in the .net framework and
a CRC implementation exceeds the scope of this project. If you
attempt to call this on a CRC hash a will
be thrown.
The stream to compute the hash for
True if the computed hash matches what's stored in this object.
Thrown if called on a CRC Hash
Creates an empty instance.
Represents a file system object on the server
Blank constructor; Fill args manually.
NOTE TO USER : You should not need to construct this class manually except in advanced cases. Typically constructed by GetListing().
Constructor with mandatory args filled.
NOTE TO USER : You should not need to construct this class manually except in advanced cases. Typically constructed by GetListing().
Gets the type of file system object.
Gets the full path name to the object.
Gets the name of the object.
Gets the target a symbolic link points to.
Gets the number of links pointing to this file. Only supplied by Unix servers.
Gets the object that the LinkTarget points to. This property is null unless you pass the
flag in which case GetListing() will try to resolve
the target itself.
Gets the last write time of the object.
Gets the created date of the object.
Gets the size of the object.
Gets special UNIX permissions such as Sticky, SUID and SGID.
Gets the owner permissions.
Gets the group permissions.
Gets the others permissions.
Gets the raw string received for the file permissions.
Use this if the other properties are blank/invalid.
Gets the file permissions in the CHMOD format.
Gets the raw string received for the file's GROUP permissions.
Use this if the other properties are blank/invalid.
Gets the raw string received for the file's OWNER permissions.
Use this if the other properties are blank/invalid.
Gets the input string that was parsed to generate the
values in this object.
Returns a string representation of this object and its properties
A string representing this object
Parses a line from a file listing using the first successful parser, or the specified parser.
Returns an FtpListItem object representing the parsed line, or null if the line was unable to be parsed.
the FTP connection that owns this parser
which server type? (SYST)
current parser, or parser set by user
parser calculated based on system type (SYST command)
if we have detected that the current parser is valid
which culture to read filenames with?
what is the time offset between server/client?
any time offset between server/client?
VMS ONLY : the blocksize used to calculate the file
Is the version number returned as part of the filename?
Some VMS FTP servers do not permit a file to be deleted unless
the filename includes the version number. Note that directories are
never returned with the version number.
Initializes a new instance of the class.
An existing object
Try to auto-detect which parser is suitable given a system string.
result of SYST command
Parse raw file list from server into file objects, using the currently active parser.
Parse raw file from server into a file object, using the currently active parser.
Validate if the current parser is correct, or if another parser seems more appropriate.
Validate if the current parser is correct
Parses a line from a file listing using the first successful match in the Parsers collection.
The source path of the file listing
A line from the file listing
Server capabilities
A FtpListItem object representing the parsed line, null if the line was
unable to be parsed. If you have encountered an unsupported list type add a parser
to the public static Parsers collection of FtpListItem.
Used for synchronizing access to the Parsers collection
Initializes the default list of parsers
Collection of parsers. Each parser object contains
a regex string that uses named groups, i.e., (?<group_name>foobar).
The support group names are modify for last write time, size for the
size and name for the name of the file system object. Each group name is
optional, if they are present then those values are retrieved from a
successful match. In addition, each parser contains a Type property
which gets set in the FtpListItem object to distinguish between different
types of objects.
Adds a custom parser
The parser delegate to add
Removes all parser delegates
Removes the specified parser
The parser delegate to remove
Parses LIST format listings
A line from the listing
Server capabilities
FtpListItem if the item is able to be parsed
Parses IIS DOS format listings
A line from the listing
Server capabilities
FtpListItem if the item is able to be parsed
Ftp listing line parser
The line from the listing
The server capabilities
FtpListItem if the line can be parsed, null otherwise
Parses MLSD/MLST format listings
A line from the listing
Server capabilities
FtpListItem if the item is able to be parsed
Parses Unix format listings
A line from the listing
FtpListItem if the item is able to be parsed
Parses Unix format listings with alternate parser
A line from the listing
FtpListItem if the item is able to be parsed
Parses IIS/DOS format listings
A line from the listing
FtpListItem if the item is able to be parsed
Parses Vax/VMS format listings
A line from the listing
FtpListItem if the item is able to be parsed
Parses NonStop format listings
A line from the listing
FtpListItem if the item is able to be parsed
Parses IBM OS/400 format listings
A line from the listing
FtpListItem if the item is able to be parsed
Split into fields by splitting on strings
Fix the date string to make the month camel case
array of fields
Represents a reply to an event on the server
The type of response received from the last command executed
The status code of the response
The message, if any, that the server sent with the response
Informational messages sent from the server
General success or failure of the last command executed
Gets the error message including any informational output
that was sent by the server. Sometimes the final response
line doesn't contain anything informative as to what was going
on with the server. Instead it may send information messages so
in an effort to give as meaningful as a response as possible
the informational messages will be included in the error.
Used for transaction logging and debug information.
Should the trace listeners be flushed immediately after writing to them?
Should the log entries be written with a prefix of "FluentFTP"?
Useful if you have a single TraceListener shared across multiple libraries.
Add a TraceListner to the collection. You can use one of the predefined
TraceListeners in the System.Diagnostics namespace, such as ConsoleTraceListener
for logging to the console, or you can write your own deriving from
System.Diagnostics.TraceListener.
The TraceListener to add to the collection
Remove the specified TraceListener from the collection
The TraceListener to remove from the collection.
Should the function calls be logged in Verbose mode?
Should the FTP server IP addresses be included in the logs?
Should the FTP usernames be included in the logs?
Should the FTP passwords be included in the logs?
Should we trace at all?
Write to the TraceListeners
The message to write
Write to the TraceListeners
The message to write
Write to the TraceListeners
The type of tracing event
The message to write
Write to the TraceListeners, adding an automatic prefix to the message based on the `eventType`
The type of tracing event
The message to write
Write to the TraceListeners, for the purpose of logging a API function call
The name of the API function
The args passed to the function
Write to the TraceListeners
The type of tracing event
A formattable string to write
A FTP client with a HTTP 1.1 proxy implementation.
A FTP client with a HTTP 1.1 proxy implementation
Proxy information
Redefine the first dialog: HTTP Frame for the HTTP 1.1 Proxy
Creates a new instance of this class. Useful in FTP proxy classes.
Connects to the server using an existing
The existing socket stream
Connects to the server using an existing
The existing socket stream
Connects to the server using an existing
The existing socket stream
Host name
Port number
IP version to use
Connects to the server using an existing
The existing socket stream
Host name
Port number
IP version to use
Abstraction of an FtpClient with a proxy
The proxy connection info.
A FTP client with a HTTP 1.1 proxy implementation
Proxy information
Redefine connect for FtpClient : authentication on the Proxy
The socket stream.
Redefine connect for FtpClient : authentication on the Proxy
The socket stream.
A FTP client with a user@host proxy identification.
A FTP client with a user@host proxy identification.
Proxy information
Creates a new instance of this class. Useful in FTP proxy classes.
Redefine the first dialog: auth with proxy information
A FTP client with a user@host proxy identification, that works with Blue Coat FTP Service servers.
The 'blue coat variant' forces the client to wait for a 220 FTP response code in
the handshake phase.
A FTP client with a user@host proxy identification.
Proxy information
Creates a new instance of this class. Useful in FTP proxy classes.
Redefine the first dialog: auth with proxy information
POCO holding proxy information
Proxy host name
Proxy port
Proxy login credentials
Base class for data stream connections
Gets the status of the command that was used to open
this data channel
Gets or sets the control connection for this data stream. Setting
the control connection causes the object to be cloned and a new
connection is made to the server to carry out the task. This ensures
that multiple streams can be opened simultaneously.
Gets or sets the length of the stream. Only valid for file transfers
and only valid on servers that support the Size command.
Gets or sets the position of the stream
Reads data off the stream
The buffer to read into
Where to start in the buffer
Number of bytes to read
The number of bytes read
Reads data off the stream asynchronously
The buffer to read into
Where to start in the buffer
Number of bytes to read
The cancellation token for this task
The number of bytes read
Writes data to the stream
The buffer to write to the stream
Where to start in the buffer
The number of bytes to write to the buffer
Writes data to the stream asynchronously
The buffer to write to the stream
Where to start in the buffer
The number of bytes to write to the buffer
The for this task
Sets the length of this stream
Value to apply to the Length property
Sets the position of the stream. Intended to be used
internally by FtpControlConnection.
The position
Closes the connection and reads the server's reply
Creates a new data stream object
The control connection to be used for carrying out this operation
Finalizer
Stream class used for talking. Used by FtpClient, extended by FtpDataStream
Used for tacking read/write activity on the socket
to determine if Poll() should be used to test for
socket connectivity. The socket in this class will
not know it has been disconnected if the remote host
closes the connection first. Using Poll() avoids
the exception that would be thrown when trying to
read or write to the disconnected socket.
The socket used for talking
Gets or sets the length of time in milliseconds
that must pass since the last socket activity
before calling Poll() on the socket to test for
connectivity. Setting this interval too low will
have a negative impact on performance. Setting this
interval to 0 disables Poll()'ing all together.
The default value is 15 seconds.
Gets the number of available bytes on the socket, 0 if the
socket has not been initialized. This property is used internally
by FtpClient in an effort to detect disconnections and gracefully
reconnect the control connection.
Gets a value indicating if this socket stream is connected
Gets a value indicating if encryption is being used
The non-encrypted stream
The encrypted stream
Gets the underlying stream, could be a NetworkStream or SslStream
Gets a value indicating if this stream can be read
Gets a value indicating if this stream if seekable
Gets a value indicating if this stream can be written to
Gets the length of the stream
Gets the current position of the stream. Trying to
set this property throws an InvalidOperationException()
Event is fired when a SSL certificate needs to be validated
Gets or sets the amount of time to wait for a read operation to complete. Default
value is Timeout.Infinite.
Gets or sets the length of time milliseconds to wait
for a connection succeed before giving up. The default
is 30000 (30 seconds).
Gets the local end point of the socket
Gets the remote end point of the socket
Fires the SSL certificate validation event
Certificate being validated
Certificate chain
Policy errors if any
True if it was accepted, false otherwise
Throws an InvalidOperationException
Ignored
Ignored
Throws an InvalidOperationException
Ignored
Flushes the stream
Flushes the stream asynchronously
The for this task
Bypass the stream and read directly off the socket.
The buffer to read into
The number of bytes read
Bypass the stream and read directly off the socket.
The buffer to read into
The number of bytes read
Reads data from the stream
Buffer to read into
Where in the buffer to start
Number of bytes to be read
The amount of bytes read from the stream
Reads data from the stream
Buffer to read into
Where in the buffer to start
Number of bytes to be read
The for this task
The amount of bytes read from the stream
Reads a line from the socket
The type of encoding used to convert from byte[] to string
A line from the stream, null if there is nothing to read
Reads all line from the socket
The type of encoding used to convert from byte[] to string
The size of the buffer
A list of lines from the stream
Reads a line from the socket asynchronously
The type of encoding used to convert from byte[] to string
The for this task
A line from the stream, null if there is nothing to read
Reads a line from the socket asynchronously
The type of encoding used to convert from byte[] to string
A line from the stream, null if there is nothing to read
Reads all line from the socket
The type of encoding used to convert from byte[] to string
The size of the buffer
A list of lines from the stream
Writes data to the stream
Buffer to write to stream
Where in the buffer to start
Number of bytes to be read
Writes data to the stream asynchronously
Buffer to write to stream
Where in the buffer to start
Number of bytes to be read
The for this task
Writes a line to the stream using the specified encoding
Encoding used for writing the line
The data to write
Writes a line to the stream using the specified encoding asynchronously
Encoding used for writing the line
The data to write
The for this task
Writes a line to the stream using the specified encoding asynchronously
Encoding used for writing the line
The data to write
Disconnects from server
Sets socket options on the underlying socket
SocketOptionLevel
SocketOptionName
SocketOptionValue
Connect to the specified host
The host to connect to
The port to connect to
Internet Protocol versions to support during the connection phase
Connect to the specified host
The host to connect to
The port to connect to
Internet Protocol versions to support during the connection phase
Activates SSL on this stream using default protocols. Fires the ValidateCertificate event.
If this event is not handled and there are SslPolicyErrors present, the certificate will
not be accepted.
The host to authenticate the certificate against
Activates SSL on this stream using default protocols. Fires the ValidateCertificate event.
If this event is not handled and there are SslPolicyErrors present, the certificate will
not be accepted.
The host to authenticate the certificate against
Activates SSL on this stream using default protocols. Fires the ValidateCertificate event.
If this event is not handled and there are SslPolicyErrors present, the certificate will
not be accepted.
The host to authenticate the certificate against
A collection of client certificates to use when authenticating the SSL stream
Activates SSL on this stream using default protocols. Fires the ValidateCertificate event.
If this event is not handled and there are SslPolicyErrors present, the certificate will
not be accepted.
The host to authenticate the certificate against
A collection of client certificates to use when authenticating the SSL stream
Activates SSL on this stream using the specified protocols. Fires the ValidateCertificate event.
If this event is not handled and there are SslPolicyErrors present, the certificate will
not be accepted.
The host to authenticate the certificate against
A collection of client certificates to use when authenticating the SSL stream
A bitwise parameter for supported encryption protocols.
Thrown when authentication fails
Activates SSL on this stream using the specified protocols. Fires the ValidateCertificate event.
If this event is not handled and there are SslPolicyErrors present, the certificate will
not be accepted.
The host to authenticate the certificate against
A collection of client certificates to use when authenticating the SSL stream
A bitwise parameter for supported encryption protocols.
Thrown when authentication fails
Deactivates SSL on this stream using the specified protocols and reverts back to plain-text FTP.
Instructs this stream to listen for connections on the specified address and port
The address to listen on
The port to listen on
Accepts a connection from a listening socket
Accepts a connection from a listening socket
Asynchronously accepts a connection from a listening socket
Completes a BeginAccept() operation
IAsyncResult returned from BeginAccept
.NET SslStream doesn't close TLS connection properly.
It does not send the close_notify alert before closing the connection.
FtpSslStream uses unsafe code to do that.
This is required when we want to downgrade the connection to plaintext using CCC command.
Thanks to Neco @ https://stackoverflow.com/questions/237807/net-sslstream-doesnt-close-tls-connection-properly/22626756#22626756
Send an SSL close_notify alert.
Extension methods related to FTP tasks
Converts the specified path into a valid FTP file system path
The file system path
A path formatted for FTP
Creates a valid FTP path by appending the specified segments to this string
This string
The path segments to append
A valid FTP path
Gets the parent directory path (formatted for a FTP server)
The path
The parent directory path
Gets the file name and extension from the path
The full path to the file
The file name
Tries to convert the string FTP date representation into a object
The date
UTC/Local Time
A object representing the date, or if there was a problem
Converts a file size in bytes to a string representation (eg. 12345 becomes 12.3 KB)
Converts a file size in bytes to a string representation (eg. 12345 becomes 12.3 KB)
Converts a file size in bytes to a string representation (eg. 12345 becomes 12.3 KB)
Converts a file size in bytes to a string representation (eg. 12345 becomes 12.3 KB)
This creates a that represents a pair of begin and end methods
that conform to the Asynchronous Programming Model pattern. This extends the maximum amount of arguments from
to 4 from a 3.
The type of the first argument passed to the delegate
The type of the second argument passed to the delegate
The type of the third argument passed to the delegate
The type of the forth argument passed to the delegate
The type of the result.
The used
The delegate that begins the asynchronous operation
The delegate that ends the asynchronous operation
The first argument passed to the delegate
The second argument passed to the delegate
The third argument passed to the delegate
The forth argument passed to the delegate
An object containing data to be used by the delegate
The created that represents the asynchronous operation
beginMethod is null
or
endMethod is null
Validates that the FtpError flags set are not in an invalid combination.
The error handling options set
True if a valid combination, otherwise false
Checks if every character in the string is whitespace, or the string is null.
Checks if the string is null or 0 length.
Checks if the array is null or 0 length.
Checks if the array is null or 0 length.
Join the given strings by a delimiter.
Join the given strings by a delimiter.
Adds a prefix to the given strings, returns a new array.
Adds a prefix to the given strings, returns a new array.
Adds a prefix to the given strings, returns a new array.