diff --git a/.NET/Libraries/.gitkeep b/.NET/Libraries/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/.NET/Libraries/net35/UnderAutomation.Fanuc.dll b/.NET/Libraries/net35/UnderAutomation.Fanuc.dll
new file mode 100644
index 0000000..c8e7ace
Binary files /dev/null and b/.NET/Libraries/net35/UnderAutomation.Fanuc.dll differ
diff --git a/.NET/Libraries/net35/UnderAutomation.Fanuc.xml b/.NET/Libraries/net35/UnderAutomation.Fanuc.xml
new file mode 100644
index 0000000..0108ee7
--- /dev/null
+++ b/.NET/Libraries/net35/UnderAutomation.Fanuc.xml
@@ -0,0 +1,5110 @@
+
+
+
+ UnderAutomation.Fanuc
+
+
+
+
+ Initialize a conenction to the robot with specified parameters
+
+
+
+
+
+ Disconnect all services connected to the robot
+
+
+
+
+ If you have a license And a key, please call this static method to register the product And exit the trial period
+ ou can register a product even if the trial period has ended
+
+ Your organization name
+ The associated key supplied by UnderAutomation
+ Information about the supplied license
+
+
+
+ Return information about your license
+
+
+
+
+ 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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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).
+
+
+
+
+ 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 FTP server. Overwritten in proxy classes.
+
+
+
+
+
+ Connect to the FTP server. Overwritten in proxy classes.
+
+
+
+
+ Called during Connect(). 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.
+
+
+
+
+ Disconnects from the server
+
+
+
+
+ Initiates a disconnection on the server
+
+ method
+ State object
+ IAsyncResult
+
+
+
+
+ Ends a call to
+
+ returned from
+
+
+
+
+ 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
+
+
+
+
+ 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?
+
+
+
+ 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.
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+ 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.
+
+
+
+ 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.
+
+
+
+ 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 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 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-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-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 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.
+
+
+
+
+ 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.
+
+
+
+
+ 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 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.
+
+
+
+ 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.
+
+
+
+
+ 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 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.
+
+
+
+ Download a file from the server and write the data into the given stream.
+ 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.
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+ 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.
+
+
+
+
+ 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 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 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 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
+
+
+
+
+ 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
+
+
+
+ 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 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
+
+
+
+
+ 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.
+
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+
+ 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 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
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+
+ 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 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.
+
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+ 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 "UnderAutomation.Fanuc.Ftp.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
+ 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.
+
+
+ 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
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+
+ 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 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
+
+
+
+ Writes data to the stream
+
+ Buffer to write to stream
+ Where in the buffer to start
+ Number of bytes to be read
+
+
+
+ Writes a line to the stream using the specified encoding
+
+ 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
+
+
+
+ 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 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
+
+
+
+
+ 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)
+
+
+
+
+ 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.
+
+
+
+
+ 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.
+
+
+
+
+ FTP Client connection to a robot
+
+
+
+
+ Instanciate a new FTP client connection
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ FTP username
+ FTP password for username
+
+
+
+ Base class for FTP features
+
+
+
+
+ Provides functions to read and decode Fanuc files
+
+
+
+
+ Connect robot IP address or host name
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ FTP username
+ FTP password for username
+
+
+
+ Indicates that FTP connection is active
+
+
+
+
+ Disconnects from FTP server
+
+
+
+
+ Delegate to track upload progress. The value provided is in the range 0 to 100
+
+ The value provided is in the range 0 to 100
+
+
+
+ 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.
+ It overwrites file if it already exists.
+
+ The full data of the file, as a stream
+ The full or relative path to the file on the server
+ Create the remote directory if it does not exist. Slows down upload due to additional checks required.
+ 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.
+ It overwrites file if it already exists.
+
+ The full data of the file, as a byte array
+ The full or relative path to the file on the server
+ Create the remote directory if it does not exist. Slows down upload due to additional checks required.
+ 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 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
+ Create the remote directory if it does not exist. Slows down upload due to additional checks required.
+ 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.
+
+
+
+ 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
+ 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.
+ 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
+ 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 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.
+ It overwrites the file if it already exists.
+
+ The full or relative path to the file on the local file system
+ 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.
+
+
+
+ Checks if a file exists on the server.
+
+ The full or relative path to the file
+ True if the file exists
+
+
+
+ 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.
+
+
+
+ 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
+
+
+
+ Deletes the specified directory and all its contents.
+
+ The full or relative path of the directory to delete
+
+
+
+ Deletes a file on the server
+
+ The full or relative path to the file
+
+
+
+ Gets a file listing from the server. Each object returned
+ contains information about the file that was able to be retrieved.
+
+ The path of the directory to list
+ An array of FtpListItem objects
+
+
+
+ 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
+ A FtpListItem object
+
+
+
+ Internal implementation of FTP Client
+
+
+
+
+ Provides functions to read and decode Fanuc FTP files
+
+
+
+
+ Provides functions to read and decode Fanuc FTP diagnostic files *.dg
+
+
+
+
+ Provides functions to read and decode Fanuc FTP variable files *.va
+
+
+
+
+ Provides functions to read and decode Fanuc FTP diagnostic files *.dg
+
+
+
+
+ Provides functions to read and decode Fanuc FTP variable files *.va
+
+
+
+
+ Represents a file system object on the server
+
+
+
+
+ Gets the size of the object.
+
+
+
+
+ Gets the file permissions in the CHMOD format.
+
+
+
+
+ Gets the created date of the object.
+
+
+
+
+ Gets the full path name to the object.
+
+
+
+
+ Gets name to the object.
+
+
+
+
+ Gets the last write time of the object.
+
+
+
+
+ Gets the type of file system object.
+
+
+
+
+ Type of file system of object
+
+
+
+
+ A file
+
+
+
+
+ A directory
+
+
+
+
+ A symbolic link
+
+
+
+
+ Base class for Telnet KCL client
+
+
+
+
+ Connect robot IP address or host name
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ Telnet password associated with KCL user
+
+
+
+ Is Telnet client connected
+
+
+
+
+ Disconnect Telnet client from robot
+
+
+
+
+ Aborts the specified running or paused task. If prog_ name is not specified, the default program Is used.
+ Execution of the current program statement Is completed before the task aborts except for the current motion, DELAY, WAIT, Or READ statements, which are canceled.
+
+ The name of any KAREL or TP program which is a task
+ Aborts all running or paused tasks
+
+
+
+ Aborts all running or paused tasks.
+ Execution of the current program statement Is completed before the task aborts except for the current motion, DELAY, WAIT, Or READ statements, which are canceled.
+
+ Aborts all running or paused tasks
+
+
+
+ Clears all KAREL and teach pendant programs and variable data from memory.
+ All cleared programs And variables (if they were saved with the SaveVars() command) can be reloaded into memory Using the Load() command.
+
+
+
+
+ Clears the program data from memory for the specified or default program.
+
+ The name of any KAREL or teach pendant program in memory
+
+
+
+ Clears the variable and type data associated with the specified or default program from memory.
+ Variables And types that are referenced by a loaded program are Not cleared.
+
+ The name of any KAREL or teach pendant program with variables
+
+
+
+ Continues program execution of the specified task (or all paused tasks if program argument is null) that has been paused by a hold, pause, or test run operation.
+ If the program Is aborted, the program execution Is started at the first executable line.
+ When a task Is paused, the CYCLE START button on the operator panel has the same effect as the Continue() command.
+ Continue is a motion command; therefore, the device from which it Is issued must have motion control.
+
+ The name of any KAREL or teach pendant program which is a task. If null, it continues all paused tasks
+
+
+
+ Pauses the specified or default program that is being executed and holds motion at the current position (after a normal deceleration).
+ Use the Continue() command Or the CYCLE START button On the Operator panel To resume program execution.
+
+ The name of any KAREL or TP program. If null, it holds all executing programs
+
+
+
+ Pauses the specified running task. If program is not specified, the default program is used.
+ Execution of the current motion segment and the current program statement is completed before the task is paused.
+ Condition handlers remain active. If the condition handler action is NOPAUSE and the condition is satisfied, task execution resumes.
+ If the statement is a WAIT FOR and the wait condition is satisfied while the task is paused, the statement following the WAIT FOR is executed immediately when the task is resumed.
+ If the statement is a DELAY, timing will continue while the task is paused.
+ If the delay time is finished while the task is paused, the statement following the DELAY is immediately executed when the task is resumed.
+ If the statement is a READ, it will accept input even though the task is paused.
+ The Continue() command resumes execution of a paused task.
+ When a task is paused, the CYCLE START button on the operator panel has the same effect as the KCL> CONTINUE command.
+
+ the name of any KAREL or TP program which is a task. If null, it pauses all running tasks.
+ Pauses the task even if the NOPAUSE attribute is set
+
+
+
+ Enables servo power after an error condition has shut off servo power, provided the cause of the error has been cleared.
+ The command also clears the message line on the CRT/KB display. The error message remains displayed if the error condition still exists.
+ The Reset() command has no effect on a program that is being executed. It has the same effect as the FAULT RESET button on the operator panel and the RESET function key on the teach pendant RESET screen.
+
+
+
+
+ Executes the specified program. The program must be loaded in memory
+ If no program is specified the default program is run. If uninitialized variables are encountered, program execution is paused.
+ Execution begins at the first executable line.
+ RUN is a motion command; therefore, the device from which it is issued must have motion control. If a RUN command is issued in a command file, it is executed as a NOWAIT command.
+ Therefore, the statement following the RUN command will be executed immediately after the RUN command is issued without waiting for the program, specified by the RUN command, to end. '''
+ The name of any KAREL or TP program.
+
+
+
+ Assigns the specified value to a specified input or output port. SET PORT can be used either physical Or simulated output ports, but only With simulated input ports.
+
+ Port type
+ Port index
+ port value. For boolean ports, true is 1 and 0 is false
+
+
+
+ Assigns the specified value to the specified variable. You can assign constant values or variable values, but the value must be of the data type that has been declared for the variable.
+ You can assign values to system variables with KCL write access, to program variables, or to standard and user-defined variables and fields. You can assign only one ARRAY element.
+ Use brackets ([]) after the variable name to specify an element.
+ Certain data types like positions and vectors might have more than one value specified. '''
+ A valid program variable
+ New value for variable or a program or system variable
+ The name of any KAREL or TP program.
+
+
+
+ Assigns the specified value to the specified variable. You can assign constant values or variable values, but the value must be of the data type that has been declared for the variable.
+ You can assign values to system variables with KCL write access, to program variables, or to standard and user-defined variables and fields. You can assign only one ARRAY element.
+ Use brackets ([]) after the variable name to specify an element.
+ Certain data types like positions and vectors might have more than one value specified. '''
+ A valid program variable
+ New value for variable or a program or system variable
+ The name of any KAREL or TP program.
+
+
+
+ Returns the position of the TCP relative to the current user frame of reference with an x, y, and z location in millimeters; w, p, and r orientation in degrees; and the current configuration string. Be sure the robot is calibrated.
+
+
+
+
+ Returns the status information of the specified or default program being executed.
+
+ The name of any KAREL or TP program in memory
+
+
+
+ Simulating I/O allows you to test a program that uses I/O. Simulating I/O does not actually send output signals or receive input signals.
+ When simulating a port value, you can specify its initial simulated value or allow the initial value to be the same as the physical port value. If no value is specified, the current physical port value is used. '''
+ I/O port type
+ I/O port index
+ New value for the port
+
+
+
+ Skips execution of the current statement in the specified task.
+ If programm is not specified, the default program is used.
+ It has no effect when a task is running or when the system is in a READY state.
+ Entire motion statements are skipped with this command. You cannot skip single motion segments.
+ The Continue() command resumes execution of the paused task with the statement following the last skipped statement. END statements cannot be skipped.
+ If you skip the last RETURN statement in a function routine, there is no way to return the value of the function to the calling program. Therefore, when executing the END statement of the routine, the task will abort.
+ If you skip into a FOR loop, you have skipped the statement that initializes the loop counter. When the ENDFOR statement is executed the program will try to remove the loop counter from the stack. If the FOR loop was nested in another FOR loop, the loop counter for the previous FOR loop will be removed from the stack, causing potentially invalid results. If the FOR loop was not nested, a stack underflow error will occur, causing the task to abort.
+ READ, MOVE, DELAY, WAIT FOR, and PULSE statements can be paused after they have begun execution. In these cases, when the task is resumed, execution of the paused statement must be finished before subsequent statements are executed. Subsequent skipped statements will not be executed.
+ In particular, READ and WAIT FOR statements often require user intervention, such as entering data, before statement execution is completed.
+ Step mode operation and step mode type have no effect on the Skip() command.
+
+ The name of any KAREL or TP program which is a task
+
+
+
+ Discontinues simulation on all input or output port. When a port is unsimulated, the physical value replaces the simulated value.
+
+
+
+
+
+ Discontinues simulation of the specified input or output port. When a port is unsimulated, the physical value replaces the simulated value.
+
+ I/O port type
+ I/O port index to unsimulate
+
+
+
+
+ Internal implementation of KCL Client
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ Telnet password associated with KCL user
+
+
+
+ Main class that represents a connection to a Fanuc Motoman industrial robot
+
+
+
+
+ Create a new instance of a robot communication
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ Telnet password associated with KCL user
+
+
+
+ Information about a license number
+
+
+
+
+ Create a new LicenseInfo instance to retrieve informations about a pair of identifier/key
+ This class should not be used to register your product. Please use static function UnderAutomation.UniversalRobot.UniversalRobotInterface.RegisterLicense to register a license.
+
+ The name of your organization (null for trial version)
+ The key, associated to the identifier, supplied by UnderAutomation (null for trial version)
+
+
+
+ Throw a InvalidLicenseException if the license is Invalid or Expired
+
+
+
+
+ The license key supplied by UnderAutomation (null for trial period)
+
+
+
+
+ Commercial name of this .NET Software library
+
+
+
+
+ Remaining days of the trial period. Null if the product is licensed. It could be negative if the trial period is ended since several days.
+
+
+
+
+ The date the trial period starts. If the product is licensed, the date of the library first use.
+
+
+
+
+ Name of your organisation
+
+
+
+
+ The date the product will expire. Null if the product is licensed.
+
+
+
+
+ The current license state
+
+
+
+
+ The date this version of the product was released.
+
+
+
+
+ Number of maintenance years included in your license
+
+
+
+
+ The date you get the license
+
+
+
+
+ The date your maintenance contract end and you no longer can use this license with newer versions.
+
+
+
+
+ A human description of the license
+
+
+
+
+ States that can take a license
+
+
+
+
+ The pair License Identifier and License Key are incompatible, you cannot use the library
+
+
+
+
+ The library is in a trial period, you can use the library
+
+
+
+
+ The library is in an extra trial period, you can use the library
+
+
+
+
+ The trial period as expired, you no more can use the library
+
+
+
+
+ Your license does not allow you to use such a recent release. Please buy maintenance to use this version
+
+
+
+
+ Congratulations, the library is licensed.
+
+
+
+
+ Exception thrown while using the product if the license is not valid.
+
+
+
+
+ The license that causes this exception
+
+
+
+
+ To support progress reporting in .NET 3.5 and .NET 4.0
+
+
+
+
+ To support progress reporting in .NET 3.5 and .NET 4.0
+
+
+
+
diff --git a/.NET/Libraries/net40/UnderAutomation.Fanuc.dll b/.NET/Libraries/net40/UnderAutomation.Fanuc.dll
new file mode 100644
index 0000000..fb91163
Binary files /dev/null and b/.NET/Libraries/net40/UnderAutomation.Fanuc.dll differ
diff --git a/.NET/Libraries/net40/UnderAutomation.Fanuc.xml b/.NET/Libraries/net40/UnderAutomation.Fanuc.xml
new file mode 100644
index 0000000..0108ee7
--- /dev/null
+++ b/.NET/Libraries/net40/UnderAutomation.Fanuc.xml
@@ -0,0 +1,5110 @@
+
+
+
+ UnderAutomation.Fanuc
+
+
+
+
+ Initialize a conenction to the robot with specified parameters
+
+
+
+
+
+ Disconnect all services connected to the robot
+
+
+
+
+ If you have a license And a key, please call this static method to register the product And exit the trial period
+ ou can register a product even if the trial period has ended
+
+ Your organization name
+ The associated key supplied by UnderAutomation
+ Information about the supplied license
+
+
+
+ Return information about your license
+
+
+
+
+ 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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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).
+
+
+
+
+ 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 FTP server. Overwritten in proxy classes.
+
+
+
+
+
+ Connect to the FTP server. Overwritten in proxy classes.
+
+
+
+
+ Called during Connect(). 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.
+
+
+
+
+ Disconnects from the server
+
+
+
+
+ Initiates a disconnection on the server
+
+ method
+ State object
+ IAsyncResult
+
+
+
+
+ Ends a call to
+
+ returned from
+
+
+
+
+ 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
+
+
+
+
+ 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?
+
+
+
+ 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.
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+ 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.
+
+
+
+ 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.
+
+
+
+ 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 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 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-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-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 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.
+
+
+
+
+ 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.
+
+
+
+
+ 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 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.
+
+
+
+ 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.
+
+
+
+
+ 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 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.
+
+
+
+ Download a file from the server and write the data into the given stream.
+ 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.
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+ 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.
+
+
+
+
+ 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 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 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 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
+
+
+
+
+ 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
+
+
+
+ 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 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
+
+
+
+
+ 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.
+
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+
+ 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 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
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+
+ 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 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.
+
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+ 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 "UnderAutomation.Fanuc.Ftp.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
+ 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.
+
+
+ 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
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+
+ 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 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
+
+
+
+ Writes data to the stream
+
+ Buffer to write to stream
+ Where in the buffer to start
+ Number of bytes to be read
+
+
+
+ Writes a line to the stream using the specified encoding
+
+ 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
+
+
+
+ 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 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
+
+
+
+
+ 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)
+
+
+
+
+ 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.
+
+
+
+
+ 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.
+
+
+
+
+ FTP Client connection to a robot
+
+
+
+
+ Instanciate a new FTP client connection
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ FTP username
+ FTP password for username
+
+
+
+ Base class for FTP features
+
+
+
+
+ Provides functions to read and decode Fanuc files
+
+
+
+
+ Connect robot IP address or host name
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ FTP username
+ FTP password for username
+
+
+
+ Indicates that FTP connection is active
+
+
+
+
+ Disconnects from FTP server
+
+
+
+
+ Delegate to track upload progress. The value provided is in the range 0 to 100
+
+ The value provided is in the range 0 to 100
+
+
+
+ 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.
+ It overwrites file if it already exists.
+
+ The full data of the file, as a stream
+ The full or relative path to the file on the server
+ Create the remote directory if it does not exist. Slows down upload due to additional checks required.
+ 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.
+ It overwrites file if it already exists.
+
+ The full data of the file, as a byte array
+ The full or relative path to the file on the server
+ Create the remote directory if it does not exist. Slows down upload due to additional checks required.
+ 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 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
+ Create the remote directory if it does not exist. Slows down upload due to additional checks required.
+ 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.
+
+
+
+ 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
+ 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.
+ 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
+ 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 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.
+ It overwrites the file if it already exists.
+
+ The full or relative path to the file on the local file system
+ 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.
+
+
+
+ Checks if a file exists on the server.
+
+ The full or relative path to the file
+ True if the file exists
+
+
+
+ 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.
+
+
+
+ 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
+
+
+
+ Deletes the specified directory and all its contents.
+
+ The full or relative path of the directory to delete
+
+
+
+ Deletes a file on the server
+
+ The full or relative path to the file
+
+
+
+ Gets a file listing from the server. Each object returned
+ contains information about the file that was able to be retrieved.
+
+ The path of the directory to list
+ An array of FtpListItem objects
+
+
+
+ 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
+ A FtpListItem object
+
+
+
+ Internal implementation of FTP Client
+
+
+
+
+ Provides functions to read and decode Fanuc FTP files
+
+
+
+
+ Provides functions to read and decode Fanuc FTP diagnostic files *.dg
+
+
+
+
+ Provides functions to read and decode Fanuc FTP variable files *.va
+
+
+
+
+ Provides functions to read and decode Fanuc FTP diagnostic files *.dg
+
+
+
+
+ Provides functions to read and decode Fanuc FTP variable files *.va
+
+
+
+
+ Represents a file system object on the server
+
+
+
+
+ Gets the size of the object.
+
+
+
+
+ Gets the file permissions in the CHMOD format.
+
+
+
+
+ Gets the created date of the object.
+
+
+
+
+ Gets the full path name to the object.
+
+
+
+
+ Gets name to the object.
+
+
+
+
+ Gets the last write time of the object.
+
+
+
+
+ Gets the type of file system object.
+
+
+
+
+ Type of file system of object
+
+
+
+
+ A file
+
+
+
+
+ A directory
+
+
+
+
+ A symbolic link
+
+
+
+
+ Base class for Telnet KCL client
+
+
+
+
+ Connect robot IP address or host name
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ Telnet password associated with KCL user
+
+
+
+ Is Telnet client connected
+
+
+
+
+ Disconnect Telnet client from robot
+
+
+
+
+ Aborts the specified running or paused task. If prog_ name is not specified, the default program Is used.
+ Execution of the current program statement Is completed before the task aborts except for the current motion, DELAY, WAIT, Or READ statements, which are canceled.
+
+ The name of any KAREL or TP program which is a task
+ Aborts all running or paused tasks
+
+
+
+ Aborts all running or paused tasks.
+ Execution of the current program statement Is completed before the task aborts except for the current motion, DELAY, WAIT, Or READ statements, which are canceled.
+
+ Aborts all running or paused tasks
+
+
+
+ Clears all KAREL and teach pendant programs and variable data from memory.
+ All cleared programs And variables (if they were saved with the SaveVars() command) can be reloaded into memory Using the Load() command.
+
+
+
+
+ Clears the program data from memory for the specified or default program.
+
+ The name of any KAREL or teach pendant program in memory
+
+
+
+ Clears the variable and type data associated with the specified or default program from memory.
+ Variables And types that are referenced by a loaded program are Not cleared.
+
+ The name of any KAREL or teach pendant program with variables
+
+
+
+ Continues program execution of the specified task (or all paused tasks if program argument is null) that has been paused by a hold, pause, or test run operation.
+ If the program Is aborted, the program execution Is started at the first executable line.
+ When a task Is paused, the CYCLE START button on the operator panel has the same effect as the Continue() command.
+ Continue is a motion command; therefore, the device from which it Is issued must have motion control.
+
+ The name of any KAREL or teach pendant program which is a task. If null, it continues all paused tasks
+
+
+
+ Pauses the specified or default program that is being executed and holds motion at the current position (after a normal deceleration).
+ Use the Continue() command Or the CYCLE START button On the Operator panel To resume program execution.
+
+ The name of any KAREL or TP program. If null, it holds all executing programs
+
+
+
+ Pauses the specified running task. If program is not specified, the default program is used.
+ Execution of the current motion segment and the current program statement is completed before the task is paused.
+ Condition handlers remain active. If the condition handler action is NOPAUSE and the condition is satisfied, task execution resumes.
+ If the statement is a WAIT FOR and the wait condition is satisfied while the task is paused, the statement following the WAIT FOR is executed immediately when the task is resumed.
+ If the statement is a DELAY, timing will continue while the task is paused.
+ If the delay time is finished while the task is paused, the statement following the DELAY is immediately executed when the task is resumed.
+ If the statement is a READ, it will accept input even though the task is paused.
+ The Continue() command resumes execution of a paused task.
+ When a task is paused, the CYCLE START button on the operator panel has the same effect as the KCL> CONTINUE command.
+
+ the name of any KAREL or TP program which is a task. If null, it pauses all running tasks.
+ Pauses the task even if the NOPAUSE attribute is set
+
+
+
+ Enables servo power after an error condition has shut off servo power, provided the cause of the error has been cleared.
+ The command also clears the message line on the CRT/KB display. The error message remains displayed if the error condition still exists.
+ The Reset() command has no effect on a program that is being executed. It has the same effect as the FAULT RESET button on the operator panel and the RESET function key on the teach pendant RESET screen.
+
+
+
+
+ Executes the specified program. The program must be loaded in memory
+ If no program is specified the default program is run. If uninitialized variables are encountered, program execution is paused.
+ Execution begins at the first executable line.
+ RUN is a motion command; therefore, the device from which it is issued must have motion control. If a RUN command is issued in a command file, it is executed as a NOWAIT command.
+ Therefore, the statement following the RUN command will be executed immediately after the RUN command is issued without waiting for the program, specified by the RUN command, to end. '''
+ The name of any KAREL or TP program.
+
+
+
+ Assigns the specified value to a specified input or output port. SET PORT can be used either physical Or simulated output ports, but only With simulated input ports.
+
+ Port type
+ Port index
+ port value. For boolean ports, true is 1 and 0 is false
+
+
+
+ Assigns the specified value to the specified variable. You can assign constant values or variable values, but the value must be of the data type that has been declared for the variable.
+ You can assign values to system variables with KCL write access, to program variables, or to standard and user-defined variables and fields. You can assign only one ARRAY element.
+ Use brackets ([]) after the variable name to specify an element.
+ Certain data types like positions and vectors might have more than one value specified. '''
+ A valid program variable
+ New value for variable or a program or system variable
+ The name of any KAREL or TP program.
+
+
+
+ Assigns the specified value to the specified variable. You can assign constant values or variable values, but the value must be of the data type that has been declared for the variable.
+ You can assign values to system variables with KCL write access, to program variables, or to standard and user-defined variables and fields. You can assign only one ARRAY element.
+ Use brackets ([]) after the variable name to specify an element.
+ Certain data types like positions and vectors might have more than one value specified. '''
+ A valid program variable
+ New value for variable or a program or system variable
+ The name of any KAREL or TP program.
+
+
+
+ Returns the position of the TCP relative to the current user frame of reference with an x, y, and z location in millimeters; w, p, and r orientation in degrees; and the current configuration string. Be sure the robot is calibrated.
+
+
+
+
+ Returns the status information of the specified or default program being executed.
+
+ The name of any KAREL or TP program in memory
+
+
+
+ Simulating I/O allows you to test a program that uses I/O. Simulating I/O does not actually send output signals or receive input signals.
+ When simulating a port value, you can specify its initial simulated value or allow the initial value to be the same as the physical port value. If no value is specified, the current physical port value is used. '''
+ I/O port type
+ I/O port index
+ New value for the port
+
+
+
+ Skips execution of the current statement in the specified task.
+ If programm is not specified, the default program is used.
+ It has no effect when a task is running or when the system is in a READY state.
+ Entire motion statements are skipped with this command. You cannot skip single motion segments.
+ The Continue() command resumes execution of the paused task with the statement following the last skipped statement. END statements cannot be skipped.
+ If you skip the last RETURN statement in a function routine, there is no way to return the value of the function to the calling program. Therefore, when executing the END statement of the routine, the task will abort.
+ If you skip into a FOR loop, you have skipped the statement that initializes the loop counter. When the ENDFOR statement is executed the program will try to remove the loop counter from the stack. If the FOR loop was nested in another FOR loop, the loop counter for the previous FOR loop will be removed from the stack, causing potentially invalid results. If the FOR loop was not nested, a stack underflow error will occur, causing the task to abort.
+ READ, MOVE, DELAY, WAIT FOR, and PULSE statements can be paused after they have begun execution. In these cases, when the task is resumed, execution of the paused statement must be finished before subsequent statements are executed. Subsequent skipped statements will not be executed.
+ In particular, READ and WAIT FOR statements often require user intervention, such as entering data, before statement execution is completed.
+ Step mode operation and step mode type have no effect on the Skip() command.
+
+ The name of any KAREL or TP program which is a task
+
+
+
+ Discontinues simulation on all input or output port. When a port is unsimulated, the physical value replaces the simulated value.
+
+
+
+
+
+ Discontinues simulation of the specified input or output port. When a port is unsimulated, the physical value replaces the simulated value.
+
+ I/O port type
+ I/O port index to unsimulate
+
+
+
+
+ Internal implementation of KCL Client
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ Telnet password associated with KCL user
+
+
+
+ Main class that represents a connection to a Fanuc Motoman industrial robot
+
+
+
+
+ Create a new instance of a robot communication
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ Telnet password associated with KCL user
+
+
+
+ Information about a license number
+
+
+
+
+ Create a new LicenseInfo instance to retrieve informations about a pair of identifier/key
+ This class should not be used to register your product. Please use static function UnderAutomation.UniversalRobot.UniversalRobotInterface.RegisterLicense to register a license.
+
+ The name of your organization (null for trial version)
+ The key, associated to the identifier, supplied by UnderAutomation (null for trial version)
+
+
+
+ Throw a InvalidLicenseException if the license is Invalid or Expired
+
+
+
+
+ The license key supplied by UnderAutomation (null for trial period)
+
+
+
+
+ Commercial name of this .NET Software library
+
+
+
+
+ Remaining days of the trial period. Null if the product is licensed. It could be negative if the trial period is ended since several days.
+
+
+
+
+ The date the trial period starts. If the product is licensed, the date of the library first use.
+
+
+
+
+ Name of your organisation
+
+
+
+
+ The date the product will expire. Null if the product is licensed.
+
+
+
+
+ The current license state
+
+
+
+
+ The date this version of the product was released.
+
+
+
+
+ Number of maintenance years included in your license
+
+
+
+
+ The date you get the license
+
+
+
+
+ The date your maintenance contract end and you no longer can use this license with newer versions.
+
+
+
+
+ A human description of the license
+
+
+
+
+ States that can take a license
+
+
+
+
+ The pair License Identifier and License Key are incompatible, you cannot use the library
+
+
+
+
+ The library is in a trial period, you can use the library
+
+
+
+
+ The library is in an extra trial period, you can use the library
+
+
+
+
+ The trial period as expired, you no more can use the library
+
+
+
+
+ Your license does not allow you to use such a recent release. Please buy maintenance to use this version
+
+
+
+
+ Congratulations, the library is licensed.
+
+
+
+
+ Exception thrown while using the product if the license is not valid.
+
+
+
+
+ The license that causes this exception
+
+
+
+
+ To support progress reporting in .NET 3.5 and .NET 4.0
+
+
+
+
+ To support progress reporting in .NET 3.5 and .NET 4.0
+
+
+
+
diff --git a/.NET/Libraries/net45/UnderAutomation.Fanuc.dll b/.NET/Libraries/net45/UnderAutomation.Fanuc.dll
new file mode 100644
index 0000000..06e1eb0
Binary files /dev/null and b/.NET/Libraries/net45/UnderAutomation.Fanuc.dll differ
diff --git a/.NET/Libraries/net45/UnderAutomation.Fanuc.xml b/.NET/Libraries/net45/UnderAutomation.Fanuc.xml
new file mode 100644
index 0000000..cd70c06
--- /dev/null
+++ b/.NET/Libraries/net45/UnderAutomation.Fanuc.xml
@@ -0,0 +1,5148 @@
+
+
+
+ UnderAutomation.Fanuc
+
+
+
+
+ Initialize a conenction to the robot with specified parameters
+
+
+
+
+
+ Disconnect all services connected to the robot
+
+
+
+
+ If you have a license And a key, please call this static method to register the product And exit the trial period
+ ou can register a product even if the trial period has ended
+
+ Your organization name
+ The associated key supplied by UnderAutomation
+ Information about the supplied license
+
+
+
+ Return information about your license
+
+
+
+
+ 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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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).
+
+
+
+
+ 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 FTP server. Overwritten in proxy classes.
+
+
+
+
+
+ Connect to the FTP server. Overwritten in proxy classes.
+
+
+
+
+ Called during Connect(). 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.
+
+
+
+
+ Disconnects from the server
+
+
+
+
+ Initiates a disconnection on the server
+
+ method
+ State object
+ IAsyncResult
+
+
+
+
+ Ends a call to
+
+ returned from
+
+
+
+
+ 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
+
+
+
+
+ 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?
+
+
+
+ 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.
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+ 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.
+
+
+
+ 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.
+
+
+
+ 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 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 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-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-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 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.
+
+
+
+
+ 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.
+
+
+
+
+ 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 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.
+
+
+
+ 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.
+
+
+
+
+ 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 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.
+
+
+
+ Download a file from the server and write the data into the given stream.
+ 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.
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+ 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.
+
+
+
+
+ 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 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 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 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
+
+
+
+
+ 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
+
+
+
+ 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 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
+
+
+
+
+ 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.
+
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+
+ 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 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
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+
+ 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 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.
+
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+ 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 "UnderAutomation.Fanuc.Ftp.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
+ 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.
+
+
+ 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
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+
+ 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 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
+
+
+
+ Writes data to the stream
+
+ Buffer to write to stream
+ Where in the buffer to start
+ Number of bytes to be read
+
+
+
+ Writes a line to the stream using the specified encoding
+
+ 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
+
+
+
+ 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 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.
+
+
+
+
+ FTP Client connection to a robot
+
+
+
+
+ Instanciate a new FTP client connection
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ FTP username
+ FTP password for username
+
+
+
+ Base class for FTP features
+
+
+
+
+ Provides functions to read and decode Fanuc files
+
+
+
+
+ Connect robot IP address or host name
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ FTP username
+ FTP password for username
+
+
+
+ Indicates that FTP connection is active
+
+
+
+
+ Disconnects from FTP server
+
+
+
+
+ Delegate to track upload progress. The value provided is in the range 0 to 100
+
+ The value provided is in the range 0 to 100
+
+
+
+ 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.
+ It overwrites file if it already exists.
+
+ The full data of the file, as a stream
+ The full or relative path to the file on the server
+ Create the remote directory if it does not exist. Slows down upload due to additional checks required.
+ 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.
+ It overwrites file if it already exists.
+
+ The full data of the file, as a byte array
+ The full or relative path to the file on the server
+ Create the remote directory if it does not exist. Slows down upload due to additional checks required.
+ 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 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
+ Create the remote directory if it does not exist. Slows down upload due to additional checks required.
+ 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.
+
+
+
+ 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
+ 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.
+ 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
+ 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 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.
+ It overwrites the file if it already exists.
+
+ The full or relative path to the file on the local file system
+ 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.
+
+
+
+ Checks if a file exists on the server.
+
+ The full or relative path to the file
+ True if the file exists
+
+
+
+ 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.
+
+
+
+ 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
+
+
+
+ Deletes the specified directory and all its contents.
+
+ The full or relative path of the directory to delete
+
+
+
+ Deletes a file on the server
+
+ The full or relative path to the file
+
+
+
+ Gets a file listing from the server. Each object returned
+ contains information about the file that was able to be retrieved.
+
+ The path of the directory to list
+ An array of FtpListItem objects
+
+
+
+ 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
+ A FtpListItem object
+
+
+
+ Internal implementation of FTP Client
+
+
+
+
+ Provides functions to read and decode Fanuc FTP files
+
+
+
+
+ Provides functions to read and decode Fanuc FTP diagnostic files *.dg
+
+
+
+
+ Provides functions to read and decode Fanuc FTP variable files *.va
+
+
+
+
+ Provides functions to read and decode Fanuc FTP diagnostic files *.dg
+
+
+
+
+ Provides functions to read and decode Fanuc FTP variable files *.va
+
+
+
+
+ Represents a file system object on the server
+
+
+
+
+ Gets the size of the object.
+
+
+
+
+ Gets the file permissions in the CHMOD format.
+
+
+
+
+ Gets the created date of the object.
+
+
+
+
+ Gets the full path name to the object.
+
+
+
+
+ Gets name to the object.
+
+
+
+
+ Gets the last write time of the object.
+
+
+
+
+ Gets the type of file system object.
+
+
+
+
+ Type of file system of object
+
+
+
+
+ A file
+
+
+
+
+ A directory
+
+
+
+
+ A symbolic link
+
+
+
+
+ Base class for Telnet KCL client
+
+
+
+
+ Connect robot IP address or host name
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ Telnet password associated with KCL user
+
+
+
+ Is Telnet client connected
+
+
+
+
+ Disconnect Telnet client from robot
+
+
+
+
+ Aborts the specified running or paused task. If prog_ name is not specified, the default program Is used.
+ Execution of the current program statement Is completed before the task aborts except for the current motion, DELAY, WAIT, Or READ statements, which are canceled.
+
+ The name of any KAREL or TP program which is a task
+ Aborts all running or paused tasks
+
+
+
+ Aborts all running or paused tasks.
+ Execution of the current program statement Is completed before the task aborts except for the current motion, DELAY, WAIT, Or READ statements, which are canceled.
+
+ Aborts all running or paused tasks
+
+
+
+ Clears all KAREL and teach pendant programs and variable data from memory.
+ All cleared programs And variables (if they were saved with the SaveVars() command) can be reloaded into memory Using the Load() command.
+
+
+
+
+ Clears the program data from memory for the specified or default program.
+
+ The name of any KAREL or teach pendant program in memory
+
+
+
+ Clears the variable and type data associated with the specified or default program from memory.
+ Variables And types that are referenced by a loaded program are Not cleared.
+
+ The name of any KAREL or teach pendant program with variables
+
+
+
+ Continues program execution of the specified task (or all paused tasks if program argument is null) that has been paused by a hold, pause, or test run operation.
+ If the program Is aborted, the program execution Is started at the first executable line.
+ When a task Is paused, the CYCLE START button on the operator panel has the same effect as the Continue() command.
+ Continue is a motion command; therefore, the device from which it Is issued must have motion control.
+
+ The name of any KAREL or teach pendant program which is a task. If null, it continues all paused tasks
+
+
+
+ Pauses the specified or default program that is being executed and holds motion at the current position (after a normal deceleration).
+ Use the Continue() command Or the CYCLE START button On the Operator panel To resume program execution.
+
+ The name of any KAREL or TP program. If null, it holds all executing programs
+
+
+
+ Pauses the specified running task. If program is not specified, the default program is used.
+ Execution of the current motion segment and the current program statement is completed before the task is paused.
+ Condition handlers remain active. If the condition handler action is NOPAUSE and the condition is satisfied, task execution resumes.
+ If the statement is a WAIT FOR and the wait condition is satisfied while the task is paused, the statement following the WAIT FOR is executed immediately when the task is resumed.
+ If the statement is a DELAY, timing will continue while the task is paused.
+ If the delay time is finished while the task is paused, the statement following the DELAY is immediately executed when the task is resumed.
+ If the statement is a READ, it will accept input even though the task is paused.
+ The Continue() command resumes execution of a paused task.
+ When a task is paused, the CYCLE START button on the operator panel has the same effect as the KCL> CONTINUE command.
+
+ the name of any KAREL or TP program which is a task. If null, it pauses all running tasks.
+ Pauses the task even if the NOPAUSE attribute is set
+
+
+
+ Enables servo power after an error condition has shut off servo power, provided the cause of the error has been cleared.
+ The command also clears the message line on the CRT/KB display. The error message remains displayed if the error condition still exists.
+ The Reset() command has no effect on a program that is being executed. It has the same effect as the FAULT RESET button on the operator panel and the RESET function key on the teach pendant RESET screen.
+
+
+
+
+ Executes the specified program. The program must be loaded in memory
+ If no program is specified the default program is run. If uninitialized variables are encountered, program execution is paused.
+ Execution begins at the first executable line.
+ RUN is a motion command; therefore, the device from which it is issued must have motion control. If a RUN command is issued in a command file, it is executed as a NOWAIT command.
+ Therefore, the statement following the RUN command will be executed immediately after the RUN command is issued without waiting for the program, specified by the RUN command, to end. '''
+ The name of any KAREL or TP program.
+
+
+
+ Assigns the specified value to a specified input or output port. SET PORT can be used either physical Or simulated output ports, but only With simulated input ports.
+
+ Port type
+ Port index
+ port value. For boolean ports, true is 1 and 0 is false
+
+
+
+ Assigns the specified value to the specified variable. You can assign constant values or variable values, but the value must be of the data type that has been declared for the variable.
+ You can assign values to system variables with KCL write access, to program variables, or to standard and user-defined variables and fields. You can assign only one ARRAY element.
+ Use brackets ([]) after the variable name to specify an element.
+ Certain data types like positions and vectors might have more than one value specified. '''
+ A valid program variable
+ New value for variable or a program or system variable
+ The name of any KAREL or TP program.
+
+
+
+ Assigns the specified value to the specified variable. You can assign constant values or variable values, but the value must be of the data type that has been declared for the variable.
+ You can assign values to system variables with KCL write access, to program variables, or to standard and user-defined variables and fields. You can assign only one ARRAY element.
+ Use brackets ([]) after the variable name to specify an element.
+ Certain data types like positions and vectors might have more than one value specified. '''
+ A valid program variable
+ New value for variable or a program or system variable
+ The name of any KAREL or TP program.
+
+
+
+ Returns the position of the TCP relative to the current user frame of reference with an x, y, and z location in millimeters; w, p, and r orientation in degrees; and the current configuration string. Be sure the robot is calibrated.
+
+
+
+
+ Returns the status information of the specified or default program being executed.
+
+ The name of any KAREL or TP program in memory
+
+
+
+ Simulating I/O allows you to test a program that uses I/O. Simulating I/O does not actually send output signals or receive input signals.
+ When simulating a port value, you can specify its initial simulated value or allow the initial value to be the same as the physical port value. If no value is specified, the current physical port value is used. '''
+ I/O port type
+ I/O port index
+ New value for the port
+
+
+
+ Skips execution of the current statement in the specified task.
+ If programm is not specified, the default program is used.
+ It has no effect when a task is running or when the system is in a READY state.
+ Entire motion statements are skipped with this command. You cannot skip single motion segments.
+ The Continue() command resumes execution of the paused task with the statement following the last skipped statement. END statements cannot be skipped.
+ If you skip the last RETURN statement in a function routine, there is no way to return the value of the function to the calling program. Therefore, when executing the END statement of the routine, the task will abort.
+ If you skip into a FOR loop, you have skipped the statement that initializes the loop counter. When the ENDFOR statement is executed the program will try to remove the loop counter from the stack. If the FOR loop was nested in another FOR loop, the loop counter for the previous FOR loop will be removed from the stack, causing potentially invalid results. If the FOR loop was not nested, a stack underflow error will occur, causing the task to abort.
+ READ, MOVE, DELAY, WAIT FOR, and PULSE statements can be paused after they have begun execution. In these cases, when the task is resumed, execution of the paused statement must be finished before subsequent statements are executed. Subsequent skipped statements will not be executed.
+ In particular, READ and WAIT FOR statements often require user intervention, such as entering data, before statement execution is completed.
+ Step mode operation and step mode type have no effect on the Skip() command.
+
+ The name of any KAREL or TP program which is a task
+
+
+
+ Discontinues simulation on all input or output port. When a port is unsimulated, the physical value replaces the simulated value.
+
+
+
+
+
+ Discontinues simulation of the specified input or output port. When a port is unsimulated, the physical value replaces the simulated value.
+
+ I/O port type
+ I/O port index to unsimulate
+
+
+
+
+ Internal implementation of KCL Client
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ Telnet password associated with KCL user
+
+
+
+ Main class that represents a connection to a Fanuc Motoman industrial robot
+
+
+
+
+ Create a new instance of a robot communication
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ Telnet password associated with KCL user
+
+
+
+ Information about a license number
+
+
+
+
+ Create a new LicenseInfo instance to retrieve informations about a pair of identifier/key
+ This class should not be used to register your product. Please use static function UnderAutomation.UniversalRobot.UniversalRobotInterface.RegisterLicense to register a license.
+
+ The name of your organization (null for trial version)
+ The key, associated to the identifier, supplied by UnderAutomation (null for trial version)
+
+
+
+ Throw a InvalidLicenseException if the license is Invalid or Expired
+
+
+
+
+ The license key supplied by UnderAutomation (null for trial period)
+
+
+
+
+ Commercial name of this .NET Software library
+
+
+
+
+ Remaining days of the trial period. Null if the product is licensed. It could be negative if the trial period is ended since several days.
+
+
+
+
+ The date the trial period starts. If the product is licensed, the date of the library first use.
+
+
+
+
+ Name of your organisation
+
+
+
+
+ The date the product will expire. Null if the product is licensed.
+
+
+
+
+ The current license state
+
+
+
+
+ The date this version of the product was released.
+
+
+
+
+ Number of maintenance years included in your license
+
+
+
+
+ The date you get the license
+
+
+
+
+ The date your maintenance contract end and you no longer can use this license with newer versions.
+
+
+
+
+ A human description of the license
+
+
+
+
+ States that can take a license
+
+
+
+
+ The pair License Identifier and License Key are incompatible, you cannot use the library
+
+
+
+
+ The library is in a trial period, you can use the library
+
+
+
+
+ The library is in an extra trial period, you can use the library
+
+
+
+
+ The trial period as expired, you no more can use the library
+
+
+
+
+ Your license does not allow you to use such a recent release. Please buy maintenance to use this version
+
+
+
+
+ Congratulations, the library is licensed.
+
+
+
+
+ Exception thrown while using the product if the license is not valid.
+
+
+
+
+ The license that causes this exception
+
+
+
+
diff --git a/.NET/Libraries/net451/UnderAutomation.Fanuc.dll b/.NET/Libraries/net451/UnderAutomation.Fanuc.dll
new file mode 100644
index 0000000..f0690ea
Binary files /dev/null and b/.NET/Libraries/net451/UnderAutomation.Fanuc.dll differ
diff --git a/.NET/Libraries/net451/UnderAutomation.Fanuc.xml b/.NET/Libraries/net451/UnderAutomation.Fanuc.xml
new file mode 100644
index 0000000..e05933f
--- /dev/null
+++ b/.NET/Libraries/net451/UnderAutomation.Fanuc.xml
@@ -0,0 +1,5100 @@
+
+
+
+ UnderAutomation.Fanuc
+
+
+
+
+ Initialize a conenction to the robot with specified parameters
+
+
+
+
+
+ Disconnect all services connected to the robot
+
+
+
+
+ If you have a license And a key, please call this static method to register the product And exit the trial period
+ ou can register a product even if the trial period has ended
+
+ Your organization name
+ The associated key supplied by UnderAutomation
+ Information about the supplied license
+
+
+
+ Return information about your license
+
+
+
+
+ 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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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).
+
+
+
+
+ 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 FTP server. Overwritten in proxy classes.
+
+
+
+
+
+ Connect to the FTP server. Overwritten in proxy classes.
+
+
+
+
+ Called during Connect(). 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.
+
+
+
+
+ Disconnects from the server
+
+
+
+
+ Initiates a disconnection on the server
+
+ method
+ State object
+ IAsyncResult
+
+
+
+
+ Ends a call to
+
+ returned from
+
+
+
+
+ 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
+
+
+
+
+ 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?
+
+
+
+ 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.
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+ 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.
+
+
+
+ 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.
+
+
+
+ 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 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 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-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-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 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.
+
+
+
+
+ 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.
+
+
+
+
+ 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 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.
+
+
+
+ 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.
+
+
+
+
+ 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 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.
+
+
+
+ Download a file from the server and write the data into the given stream.
+ 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.
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+ 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.
+
+
+
+
+ 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 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 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 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
+
+
+
+
+ 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
+
+
+
+ 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 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
+
+
+
+
+ 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.
+
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+
+ 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 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
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+
+ 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 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.
+
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+ 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 "UnderAutomation.Fanuc.Ftp.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
+ 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.
+
+
+ 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
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+
+ 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 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
+
+
+
+ Writes data to the stream
+
+ Buffer to write to stream
+ Where in the buffer to start
+ Number of bytes to be read
+
+
+
+ Writes a line to the stream using the specified encoding
+
+ 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
+
+
+
+ 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 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
+
+
+
+
+ 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)
+
+
+
+
+ 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.
+
+
+
+
+ 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.
+
+
+
+
+ FTP Client connection to a robot
+
+
+
+
+ Instanciate a new FTP client connection
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ FTP username
+ FTP password for username
+
+
+
+ Base class for FTP features
+
+
+
+
+ Provides functions to read and decode Fanuc files
+
+
+
+
+ Connect robot IP address or host name
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ FTP username
+ FTP password for username
+
+
+
+ Indicates that FTP connection is active
+
+
+
+
+ Disconnects from FTP server
+
+
+
+
+ Delegate to track upload progress. The value provided is in the range 0 to 100
+
+ The value provided is in the range 0 to 100
+
+
+
+ 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.
+ It overwrites file if it already exists.
+
+ The full data of the file, as a stream
+ The full or relative path to the file on the server
+ Create the remote directory if it does not exist. Slows down upload due to additional checks required.
+ 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.
+ It overwrites file if it already exists.
+
+ The full data of the file, as a byte array
+ The full or relative path to the file on the server
+ Create the remote directory if it does not exist. Slows down upload due to additional checks required.
+ 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 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
+ Create the remote directory if it does not exist. Slows down upload due to additional checks required.
+ 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.
+
+
+
+ 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
+ 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.
+ 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
+ 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 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.
+ It overwrites the file if it already exists.
+
+ The full or relative path to the file on the local file system
+ 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.
+
+
+
+ Checks if a file exists on the server.
+
+ The full or relative path to the file
+ True if the file exists
+
+
+
+ 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.
+
+
+
+ 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
+
+
+
+ Deletes the specified directory and all its contents.
+
+ The full or relative path of the directory to delete
+
+
+
+ Deletes a file on the server
+
+ The full or relative path to the file
+
+
+
+ Gets a file listing from the server. Each object returned
+ contains information about the file that was able to be retrieved.
+
+ The path of the directory to list
+ An array of FtpListItem objects
+
+
+
+ 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
+ A FtpListItem object
+
+
+
+ Internal implementation of FTP Client
+
+
+
+
+ Provides functions to read and decode Fanuc FTP files
+
+
+
+
+ Provides functions to read and decode Fanuc FTP diagnostic files *.dg
+
+
+
+
+ Provides functions to read and decode Fanuc FTP variable files *.va
+
+
+
+
+ Provides functions to read and decode Fanuc FTP diagnostic files *.dg
+
+
+
+
+ Provides functions to read and decode Fanuc FTP variable files *.va
+
+
+
+
+ Represents a file system object on the server
+
+
+
+
+ Gets the size of the object.
+
+
+
+
+ Gets the file permissions in the CHMOD format.
+
+
+
+
+ Gets the created date of the object.
+
+
+
+
+ Gets the full path name to the object.
+
+
+
+
+ Gets name to the object.
+
+
+
+
+ Gets the last write time of the object.
+
+
+
+
+ Gets the type of file system object.
+
+
+
+
+ Type of file system of object
+
+
+
+
+ A file
+
+
+
+
+ A directory
+
+
+
+
+ A symbolic link
+
+
+
+
+ Base class for Telnet KCL client
+
+
+
+
+ Connect robot IP address or host name
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ Telnet password associated with KCL user
+
+
+
+ Is Telnet client connected
+
+
+
+
+ Disconnect Telnet client from robot
+
+
+
+
+ Aborts the specified running or paused task. If prog_ name is not specified, the default program Is used.
+ Execution of the current program statement Is completed before the task aborts except for the current motion, DELAY, WAIT, Or READ statements, which are canceled.
+
+ The name of any KAREL or TP program which is a task
+ Aborts all running or paused tasks
+
+
+
+ Aborts all running or paused tasks.
+ Execution of the current program statement Is completed before the task aborts except for the current motion, DELAY, WAIT, Or READ statements, which are canceled.
+
+ Aborts all running or paused tasks
+
+
+
+ Clears all KAREL and teach pendant programs and variable data from memory.
+ All cleared programs And variables (if they were saved with the SaveVars() command) can be reloaded into memory Using the Load() command.
+
+
+
+
+ Clears the program data from memory for the specified or default program.
+
+ The name of any KAREL or teach pendant program in memory
+
+
+
+ Clears the variable and type data associated with the specified or default program from memory.
+ Variables And types that are referenced by a loaded program are Not cleared.
+
+ The name of any KAREL or teach pendant program with variables
+
+
+
+ Continues program execution of the specified task (or all paused tasks if program argument is null) that has been paused by a hold, pause, or test run operation.
+ If the program Is aborted, the program execution Is started at the first executable line.
+ When a task Is paused, the CYCLE START button on the operator panel has the same effect as the Continue() command.
+ Continue is a motion command; therefore, the device from which it Is issued must have motion control.
+
+ The name of any KAREL or teach pendant program which is a task. If null, it continues all paused tasks
+
+
+
+ Pauses the specified or default program that is being executed and holds motion at the current position (after a normal deceleration).
+ Use the Continue() command Or the CYCLE START button On the Operator panel To resume program execution.
+
+ The name of any KAREL or TP program. If null, it holds all executing programs
+
+
+
+ Pauses the specified running task. If program is not specified, the default program is used.
+ Execution of the current motion segment and the current program statement is completed before the task is paused.
+ Condition handlers remain active. If the condition handler action is NOPAUSE and the condition is satisfied, task execution resumes.
+ If the statement is a WAIT FOR and the wait condition is satisfied while the task is paused, the statement following the WAIT FOR is executed immediately when the task is resumed.
+ If the statement is a DELAY, timing will continue while the task is paused.
+ If the delay time is finished while the task is paused, the statement following the DELAY is immediately executed when the task is resumed.
+ If the statement is a READ, it will accept input even though the task is paused.
+ The Continue() command resumes execution of a paused task.
+ When a task is paused, the CYCLE START button on the operator panel has the same effect as the KCL> CONTINUE command.
+
+ the name of any KAREL or TP program which is a task. If null, it pauses all running tasks.
+ Pauses the task even if the NOPAUSE attribute is set
+
+
+
+ Enables servo power after an error condition has shut off servo power, provided the cause of the error has been cleared.
+ The command also clears the message line on the CRT/KB display. The error message remains displayed if the error condition still exists.
+ The Reset() command has no effect on a program that is being executed. It has the same effect as the FAULT RESET button on the operator panel and the RESET function key on the teach pendant RESET screen.
+
+
+
+
+ Executes the specified program. The program must be loaded in memory
+ If no program is specified the default program is run. If uninitialized variables are encountered, program execution is paused.
+ Execution begins at the first executable line.
+ RUN is a motion command; therefore, the device from which it is issued must have motion control. If a RUN command is issued in a command file, it is executed as a NOWAIT command.
+ Therefore, the statement following the RUN command will be executed immediately after the RUN command is issued without waiting for the program, specified by the RUN command, to end. '''
+ The name of any KAREL or TP program.
+
+
+
+ Assigns the specified value to a specified input or output port. SET PORT can be used either physical Or simulated output ports, but only With simulated input ports.
+
+ Port type
+ Port index
+ port value. For boolean ports, true is 1 and 0 is false
+
+
+
+ Assigns the specified value to the specified variable. You can assign constant values or variable values, but the value must be of the data type that has been declared for the variable.
+ You can assign values to system variables with KCL write access, to program variables, or to standard and user-defined variables and fields. You can assign only one ARRAY element.
+ Use brackets ([]) after the variable name to specify an element.
+ Certain data types like positions and vectors might have more than one value specified. '''
+ A valid program variable
+ New value for variable or a program or system variable
+ The name of any KAREL or TP program.
+
+
+
+ Assigns the specified value to the specified variable. You can assign constant values or variable values, but the value must be of the data type that has been declared for the variable.
+ You can assign values to system variables with KCL write access, to program variables, or to standard and user-defined variables and fields. You can assign only one ARRAY element.
+ Use brackets ([]) after the variable name to specify an element.
+ Certain data types like positions and vectors might have more than one value specified. '''
+ A valid program variable
+ New value for variable or a program or system variable
+ The name of any KAREL or TP program.
+
+
+
+ Returns the position of the TCP relative to the current user frame of reference with an x, y, and z location in millimeters; w, p, and r orientation in degrees; and the current configuration string. Be sure the robot is calibrated.
+
+
+
+
+ Returns the status information of the specified or default program being executed.
+
+ The name of any KAREL or TP program in memory
+
+
+
+ Simulating I/O allows you to test a program that uses I/O. Simulating I/O does not actually send output signals or receive input signals.
+ When simulating a port value, you can specify its initial simulated value or allow the initial value to be the same as the physical port value. If no value is specified, the current physical port value is used. '''
+ I/O port type
+ I/O port index
+ New value for the port
+
+
+
+ Skips execution of the current statement in the specified task.
+ If programm is not specified, the default program is used.
+ It has no effect when a task is running or when the system is in a READY state.
+ Entire motion statements are skipped with this command. You cannot skip single motion segments.
+ The Continue() command resumes execution of the paused task with the statement following the last skipped statement. END statements cannot be skipped.
+ If you skip the last RETURN statement in a function routine, there is no way to return the value of the function to the calling program. Therefore, when executing the END statement of the routine, the task will abort.
+ If you skip into a FOR loop, you have skipped the statement that initializes the loop counter. When the ENDFOR statement is executed the program will try to remove the loop counter from the stack. If the FOR loop was nested in another FOR loop, the loop counter for the previous FOR loop will be removed from the stack, causing potentially invalid results. If the FOR loop was not nested, a stack underflow error will occur, causing the task to abort.
+ READ, MOVE, DELAY, WAIT FOR, and PULSE statements can be paused after they have begun execution. In these cases, when the task is resumed, execution of the paused statement must be finished before subsequent statements are executed. Subsequent skipped statements will not be executed.
+ In particular, READ and WAIT FOR statements often require user intervention, such as entering data, before statement execution is completed.
+ Step mode operation and step mode type have no effect on the Skip() command.
+
+ The name of any KAREL or TP program which is a task
+
+
+
+ Discontinues simulation on all input or output port. When a port is unsimulated, the physical value replaces the simulated value.
+
+
+
+
+
+ Discontinues simulation of the specified input or output port. When a port is unsimulated, the physical value replaces the simulated value.
+
+ I/O port type
+ I/O port index to unsimulate
+
+
+
+
+ Internal implementation of KCL Client
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ Telnet password associated with KCL user
+
+
+
+ Main class that represents a connection to a Fanuc Motoman industrial robot
+
+
+
+
+ Create a new instance of a robot communication
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ Telnet password associated with KCL user
+
+
+
+ Information about a license number
+
+
+
+
+ Create a new LicenseInfo instance to retrieve informations about a pair of identifier/key
+ This class should not be used to register your product. Please use static function UnderAutomation.UniversalRobot.UniversalRobotInterface.RegisterLicense to register a license.
+
+ The name of your organization (null for trial version)
+ The key, associated to the identifier, supplied by UnderAutomation (null for trial version)
+
+
+
+ Throw a InvalidLicenseException if the license is Invalid or Expired
+
+
+
+
+ The license key supplied by UnderAutomation (null for trial period)
+
+
+
+
+ Commercial name of this .NET Software library
+
+
+
+
+ Remaining days of the trial period. Null if the product is licensed. It could be negative if the trial period is ended since several days.
+
+
+
+
+ The date the trial period starts. If the product is licensed, the date of the library first use.
+
+
+
+
+ Name of your organisation
+
+
+
+
+ The date the product will expire. Null if the product is licensed.
+
+
+
+
+ The current license state
+
+
+
+
+ The date this version of the product was released.
+
+
+
+
+ Number of maintenance years included in your license
+
+
+
+
+ The date you get the license
+
+
+
+
+ The date your maintenance contract end and you no longer can use this license with newer versions.
+
+
+
+
+ A human description of the license
+
+
+
+
+ States that can take a license
+
+
+
+
+ The pair License Identifier and License Key are incompatible, you cannot use the library
+
+
+
+
+ The library is in a trial period, you can use the library
+
+
+
+
+ The library is in an extra trial period, you can use the library
+
+
+
+
+ The trial period as expired, you no more can use the library
+
+
+
+
+ Your license does not allow you to use such a recent release. Please buy maintenance to use this version
+
+
+
+
+ Congratulations, the library is licensed.
+
+
+
+
+ Exception thrown while using the product if the license is not valid.
+
+
+
+
+ The license that causes this exception
+
+
+
+
diff --git a/.NET/Libraries/net452/UnderAutomation.Fanuc.dll b/.NET/Libraries/net452/UnderAutomation.Fanuc.dll
new file mode 100644
index 0000000..a662534
Binary files /dev/null and b/.NET/Libraries/net452/UnderAutomation.Fanuc.dll differ
diff --git a/.NET/Libraries/net452/UnderAutomation.Fanuc.xml b/.NET/Libraries/net452/UnderAutomation.Fanuc.xml
new file mode 100644
index 0000000..e05933f
--- /dev/null
+++ b/.NET/Libraries/net452/UnderAutomation.Fanuc.xml
@@ -0,0 +1,5100 @@
+
+
+
+ UnderAutomation.Fanuc
+
+
+
+
+ Initialize a conenction to the robot with specified parameters
+
+
+
+
+
+ Disconnect all services connected to the robot
+
+
+
+
+ If you have a license And a key, please call this static method to register the product And exit the trial period
+ ou can register a product even if the trial period has ended
+
+ Your organization name
+ The associated key supplied by UnderAutomation
+ Information about the supplied license
+
+
+
+ Return information about your license
+
+
+
+
+ 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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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).
+
+
+
+
+ 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 FTP server. Overwritten in proxy classes.
+
+
+
+
+
+ Connect to the FTP server. Overwritten in proxy classes.
+
+
+
+
+ Called during Connect(). 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.
+
+
+
+
+ Disconnects from the server
+
+
+
+
+ Initiates a disconnection on the server
+
+ method
+ State object
+ IAsyncResult
+
+
+
+
+ Ends a call to
+
+ returned from
+
+
+
+
+ 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
+
+
+
+
+ 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?
+
+
+
+ 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.
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+ 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.
+
+
+
+ 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.
+
+
+
+ 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 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 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-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-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 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.
+
+
+
+
+ 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.
+
+
+
+
+ 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 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.
+
+
+
+ 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.
+
+
+
+
+ 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 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.
+
+
+
+ Download a file from the server and write the data into the given stream.
+ 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.
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+ 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.
+
+
+
+
+ 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 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 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 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
+
+
+
+
+ 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
+
+
+
+ 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 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
+
+
+
+
+ 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.
+
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+
+ 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 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
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+
+ 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 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.
+
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+ 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 "UnderAutomation.Fanuc.Ftp.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
+ 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.
+
+
+ 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
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+
+ 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 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
+
+
+
+ Writes data to the stream
+
+ Buffer to write to stream
+ Where in the buffer to start
+ Number of bytes to be read
+
+
+
+ Writes a line to the stream using the specified encoding
+
+ 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
+
+
+
+ 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 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
+
+
+
+
+ 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)
+
+
+
+
+ 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.
+
+
+
+
+ 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.
+
+
+
+
+ FTP Client connection to a robot
+
+
+
+
+ Instanciate a new FTP client connection
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ FTP username
+ FTP password for username
+
+
+
+ Base class for FTP features
+
+
+
+
+ Provides functions to read and decode Fanuc files
+
+
+
+
+ Connect robot IP address or host name
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ FTP username
+ FTP password for username
+
+
+
+ Indicates that FTP connection is active
+
+
+
+
+ Disconnects from FTP server
+
+
+
+
+ Delegate to track upload progress. The value provided is in the range 0 to 100
+
+ The value provided is in the range 0 to 100
+
+
+
+ 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.
+ It overwrites file if it already exists.
+
+ The full data of the file, as a stream
+ The full or relative path to the file on the server
+ Create the remote directory if it does not exist. Slows down upload due to additional checks required.
+ 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.
+ It overwrites file if it already exists.
+
+ The full data of the file, as a byte array
+ The full or relative path to the file on the server
+ Create the remote directory if it does not exist. Slows down upload due to additional checks required.
+ 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 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
+ Create the remote directory if it does not exist. Slows down upload due to additional checks required.
+ 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.
+
+
+
+ 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
+ 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.
+ 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
+ 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 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.
+ It overwrites the file if it already exists.
+
+ The full or relative path to the file on the local file system
+ 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.
+
+
+
+ Checks if a file exists on the server.
+
+ The full or relative path to the file
+ True if the file exists
+
+
+
+ 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.
+
+
+
+ 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
+
+
+
+ Deletes the specified directory and all its contents.
+
+ The full or relative path of the directory to delete
+
+
+
+ Deletes a file on the server
+
+ The full or relative path to the file
+
+
+
+ Gets a file listing from the server. Each object returned
+ contains information about the file that was able to be retrieved.
+
+ The path of the directory to list
+ An array of FtpListItem objects
+
+
+
+ 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
+ A FtpListItem object
+
+
+
+ Internal implementation of FTP Client
+
+
+
+
+ Provides functions to read and decode Fanuc FTP files
+
+
+
+
+ Provides functions to read and decode Fanuc FTP diagnostic files *.dg
+
+
+
+
+ Provides functions to read and decode Fanuc FTP variable files *.va
+
+
+
+
+ Provides functions to read and decode Fanuc FTP diagnostic files *.dg
+
+
+
+
+ Provides functions to read and decode Fanuc FTP variable files *.va
+
+
+
+
+ Represents a file system object on the server
+
+
+
+
+ Gets the size of the object.
+
+
+
+
+ Gets the file permissions in the CHMOD format.
+
+
+
+
+ Gets the created date of the object.
+
+
+
+
+ Gets the full path name to the object.
+
+
+
+
+ Gets name to the object.
+
+
+
+
+ Gets the last write time of the object.
+
+
+
+
+ Gets the type of file system object.
+
+
+
+
+ Type of file system of object
+
+
+
+
+ A file
+
+
+
+
+ A directory
+
+
+
+
+ A symbolic link
+
+
+
+
+ Base class for Telnet KCL client
+
+
+
+
+ Connect robot IP address or host name
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ Telnet password associated with KCL user
+
+
+
+ Is Telnet client connected
+
+
+
+
+ Disconnect Telnet client from robot
+
+
+
+
+ Aborts the specified running or paused task. If prog_ name is not specified, the default program Is used.
+ Execution of the current program statement Is completed before the task aborts except for the current motion, DELAY, WAIT, Or READ statements, which are canceled.
+
+ The name of any KAREL or TP program which is a task
+ Aborts all running or paused tasks
+
+
+
+ Aborts all running or paused tasks.
+ Execution of the current program statement Is completed before the task aborts except for the current motion, DELAY, WAIT, Or READ statements, which are canceled.
+
+ Aborts all running or paused tasks
+
+
+
+ Clears all KAREL and teach pendant programs and variable data from memory.
+ All cleared programs And variables (if they were saved with the SaveVars() command) can be reloaded into memory Using the Load() command.
+
+
+
+
+ Clears the program data from memory for the specified or default program.
+
+ The name of any KAREL or teach pendant program in memory
+
+
+
+ Clears the variable and type data associated with the specified or default program from memory.
+ Variables And types that are referenced by a loaded program are Not cleared.
+
+ The name of any KAREL or teach pendant program with variables
+
+
+
+ Continues program execution of the specified task (or all paused tasks if program argument is null) that has been paused by a hold, pause, or test run operation.
+ If the program Is aborted, the program execution Is started at the first executable line.
+ When a task Is paused, the CYCLE START button on the operator panel has the same effect as the Continue() command.
+ Continue is a motion command; therefore, the device from which it Is issued must have motion control.
+
+ The name of any KAREL or teach pendant program which is a task. If null, it continues all paused tasks
+
+
+
+ Pauses the specified or default program that is being executed and holds motion at the current position (after a normal deceleration).
+ Use the Continue() command Or the CYCLE START button On the Operator panel To resume program execution.
+
+ The name of any KAREL or TP program. If null, it holds all executing programs
+
+
+
+ Pauses the specified running task. If program is not specified, the default program is used.
+ Execution of the current motion segment and the current program statement is completed before the task is paused.
+ Condition handlers remain active. If the condition handler action is NOPAUSE and the condition is satisfied, task execution resumes.
+ If the statement is a WAIT FOR and the wait condition is satisfied while the task is paused, the statement following the WAIT FOR is executed immediately when the task is resumed.
+ If the statement is a DELAY, timing will continue while the task is paused.
+ If the delay time is finished while the task is paused, the statement following the DELAY is immediately executed when the task is resumed.
+ If the statement is a READ, it will accept input even though the task is paused.
+ The Continue() command resumes execution of a paused task.
+ When a task is paused, the CYCLE START button on the operator panel has the same effect as the KCL> CONTINUE command.
+
+ the name of any KAREL or TP program which is a task. If null, it pauses all running tasks.
+ Pauses the task even if the NOPAUSE attribute is set
+
+
+
+ Enables servo power after an error condition has shut off servo power, provided the cause of the error has been cleared.
+ The command also clears the message line on the CRT/KB display. The error message remains displayed if the error condition still exists.
+ The Reset() command has no effect on a program that is being executed. It has the same effect as the FAULT RESET button on the operator panel and the RESET function key on the teach pendant RESET screen.
+
+
+
+
+ Executes the specified program. The program must be loaded in memory
+ If no program is specified the default program is run. If uninitialized variables are encountered, program execution is paused.
+ Execution begins at the first executable line.
+ RUN is a motion command; therefore, the device from which it is issued must have motion control. If a RUN command is issued in a command file, it is executed as a NOWAIT command.
+ Therefore, the statement following the RUN command will be executed immediately after the RUN command is issued without waiting for the program, specified by the RUN command, to end. '''
+ The name of any KAREL or TP program.
+
+
+
+ Assigns the specified value to a specified input or output port. SET PORT can be used either physical Or simulated output ports, but only With simulated input ports.
+
+ Port type
+ Port index
+ port value. For boolean ports, true is 1 and 0 is false
+
+
+
+ Assigns the specified value to the specified variable. You can assign constant values or variable values, but the value must be of the data type that has been declared for the variable.
+ You can assign values to system variables with KCL write access, to program variables, or to standard and user-defined variables and fields. You can assign only one ARRAY element.
+ Use brackets ([]) after the variable name to specify an element.
+ Certain data types like positions and vectors might have more than one value specified. '''
+ A valid program variable
+ New value for variable or a program or system variable
+ The name of any KAREL or TP program.
+
+
+
+ Assigns the specified value to the specified variable. You can assign constant values or variable values, but the value must be of the data type that has been declared for the variable.
+ You can assign values to system variables with KCL write access, to program variables, or to standard and user-defined variables and fields. You can assign only one ARRAY element.
+ Use brackets ([]) after the variable name to specify an element.
+ Certain data types like positions and vectors might have more than one value specified. '''
+ A valid program variable
+ New value for variable or a program or system variable
+ The name of any KAREL or TP program.
+
+
+
+ Returns the position of the TCP relative to the current user frame of reference with an x, y, and z location in millimeters; w, p, and r orientation in degrees; and the current configuration string. Be sure the robot is calibrated.
+
+
+
+
+ Returns the status information of the specified or default program being executed.
+
+ The name of any KAREL or TP program in memory
+
+
+
+ Simulating I/O allows you to test a program that uses I/O. Simulating I/O does not actually send output signals or receive input signals.
+ When simulating a port value, you can specify its initial simulated value or allow the initial value to be the same as the physical port value. If no value is specified, the current physical port value is used. '''
+ I/O port type
+ I/O port index
+ New value for the port
+
+
+
+ Skips execution of the current statement in the specified task.
+ If programm is not specified, the default program is used.
+ It has no effect when a task is running or when the system is in a READY state.
+ Entire motion statements are skipped with this command. You cannot skip single motion segments.
+ The Continue() command resumes execution of the paused task with the statement following the last skipped statement. END statements cannot be skipped.
+ If you skip the last RETURN statement in a function routine, there is no way to return the value of the function to the calling program. Therefore, when executing the END statement of the routine, the task will abort.
+ If you skip into a FOR loop, you have skipped the statement that initializes the loop counter. When the ENDFOR statement is executed the program will try to remove the loop counter from the stack. If the FOR loop was nested in another FOR loop, the loop counter for the previous FOR loop will be removed from the stack, causing potentially invalid results. If the FOR loop was not nested, a stack underflow error will occur, causing the task to abort.
+ READ, MOVE, DELAY, WAIT FOR, and PULSE statements can be paused after they have begun execution. In these cases, when the task is resumed, execution of the paused statement must be finished before subsequent statements are executed. Subsequent skipped statements will not be executed.
+ In particular, READ and WAIT FOR statements often require user intervention, such as entering data, before statement execution is completed.
+ Step mode operation and step mode type have no effect on the Skip() command.
+
+ The name of any KAREL or TP program which is a task
+
+
+
+ Discontinues simulation on all input or output port. When a port is unsimulated, the physical value replaces the simulated value.
+
+
+
+
+
+ Discontinues simulation of the specified input or output port. When a port is unsimulated, the physical value replaces the simulated value.
+
+ I/O port type
+ I/O port index to unsimulate
+
+
+
+
+ Internal implementation of KCL Client
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ Telnet password associated with KCL user
+
+
+
+ Main class that represents a connection to a Fanuc Motoman industrial robot
+
+
+
+
+ Create a new instance of a robot communication
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ Telnet password associated with KCL user
+
+
+
+ Information about a license number
+
+
+
+
+ Create a new LicenseInfo instance to retrieve informations about a pair of identifier/key
+ This class should not be used to register your product. Please use static function UnderAutomation.UniversalRobot.UniversalRobotInterface.RegisterLicense to register a license.
+
+ The name of your organization (null for trial version)
+ The key, associated to the identifier, supplied by UnderAutomation (null for trial version)
+
+
+
+ Throw a InvalidLicenseException if the license is Invalid or Expired
+
+
+
+
+ The license key supplied by UnderAutomation (null for trial period)
+
+
+
+
+ Commercial name of this .NET Software library
+
+
+
+
+ Remaining days of the trial period. Null if the product is licensed. It could be negative if the trial period is ended since several days.
+
+
+
+
+ The date the trial period starts. If the product is licensed, the date of the library first use.
+
+
+
+
+ Name of your organisation
+
+
+
+
+ The date the product will expire. Null if the product is licensed.
+
+
+
+
+ The current license state
+
+
+
+
+ The date this version of the product was released.
+
+
+
+
+ Number of maintenance years included in your license
+
+
+
+
+ The date you get the license
+
+
+
+
+ The date your maintenance contract end and you no longer can use this license with newer versions.
+
+
+
+
+ A human description of the license
+
+
+
+
+ States that can take a license
+
+
+
+
+ The pair License Identifier and License Key are incompatible, you cannot use the library
+
+
+
+
+ The library is in a trial period, you can use the library
+
+
+
+
+ The library is in an extra trial period, you can use the library
+
+
+
+
+ The trial period as expired, you no more can use the library
+
+
+
+
+ Your license does not allow you to use such a recent release. Please buy maintenance to use this version
+
+
+
+
+ Congratulations, the library is licensed.
+
+
+
+
+ Exception thrown while using the product if the license is not valid.
+
+
+
+
+ The license that causes this exception
+
+
+
+
diff --git a/.NET/Libraries/net46/UnderAutomation.Fanuc.dll b/.NET/Libraries/net46/UnderAutomation.Fanuc.dll
new file mode 100644
index 0000000..a6b4fdf
Binary files /dev/null and b/.NET/Libraries/net46/UnderAutomation.Fanuc.dll differ
diff --git a/.NET/Libraries/net46/UnderAutomation.Fanuc.xml b/.NET/Libraries/net46/UnderAutomation.Fanuc.xml
new file mode 100644
index 0000000..e05933f
--- /dev/null
+++ b/.NET/Libraries/net46/UnderAutomation.Fanuc.xml
@@ -0,0 +1,5100 @@
+
+
+
+ UnderAutomation.Fanuc
+
+
+
+
+ Initialize a conenction to the robot with specified parameters
+
+
+
+
+
+ Disconnect all services connected to the robot
+
+
+
+
+ If you have a license And a key, please call this static method to register the product And exit the trial period
+ ou can register a product even if the trial period has ended
+
+ Your organization name
+ The associated key supplied by UnderAutomation
+ Information about the supplied license
+
+
+
+ Return information about your license
+
+
+
+
+ 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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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).
+
+
+
+
+ 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 FTP server. Overwritten in proxy classes.
+
+
+
+
+
+ Connect to the FTP server. Overwritten in proxy classes.
+
+
+
+
+ Called during Connect(). 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.
+
+
+
+
+ Disconnects from the server
+
+
+
+
+ Initiates a disconnection on the server
+
+ method
+ State object
+ IAsyncResult
+
+
+
+
+ Ends a call to
+
+ returned from
+
+
+
+
+ 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
+
+
+
+
+ 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?
+
+
+
+ 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.
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+ 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.
+
+
+
+ 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.
+
+
+
+ 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 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 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-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-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 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.
+
+
+
+
+ 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.
+
+
+
+
+ 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 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.
+
+
+
+ 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.
+
+
+
+
+ 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 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.
+
+
+
+ Download a file from the server and write the data into the given stream.
+ 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.
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+ 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.
+
+
+
+
+ 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 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 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 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
+
+
+
+
+ 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
+
+
+
+ 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 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
+
+
+
+
+ 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.
+
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+
+ 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 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
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+
+ 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 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.
+
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+ 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 "UnderAutomation.Fanuc.Ftp.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
+ 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.
+
+
+ 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
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+
+ 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 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
+
+
+
+ Writes data to the stream
+
+ Buffer to write to stream
+ Where in the buffer to start
+ Number of bytes to be read
+
+
+
+ Writes a line to the stream using the specified encoding
+
+ 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
+
+
+
+ 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 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
+
+
+
+
+ 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)
+
+
+
+
+ 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.
+
+
+
+
+ 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.
+
+
+
+
+ FTP Client connection to a robot
+
+
+
+
+ Instanciate a new FTP client connection
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ FTP username
+ FTP password for username
+
+
+
+ Base class for FTP features
+
+
+
+
+ Provides functions to read and decode Fanuc files
+
+
+
+
+ Connect robot IP address or host name
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ FTP username
+ FTP password for username
+
+
+
+ Indicates that FTP connection is active
+
+
+
+
+ Disconnects from FTP server
+
+
+
+
+ Delegate to track upload progress. The value provided is in the range 0 to 100
+
+ The value provided is in the range 0 to 100
+
+
+
+ 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.
+ It overwrites file if it already exists.
+
+ The full data of the file, as a stream
+ The full or relative path to the file on the server
+ Create the remote directory if it does not exist. Slows down upload due to additional checks required.
+ 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.
+ It overwrites file if it already exists.
+
+ The full data of the file, as a byte array
+ The full or relative path to the file on the server
+ Create the remote directory if it does not exist. Slows down upload due to additional checks required.
+ 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 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
+ Create the remote directory if it does not exist. Slows down upload due to additional checks required.
+ 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.
+
+
+
+ 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
+ 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.
+ 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
+ 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 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.
+ It overwrites the file if it already exists.
+
+ The full or relative path to the file on the local file system
+ 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.
+
+
+
+ Checks if a file exists on the server.
+
+ The full or relative path to the file
+ True if the file exists
+
+
+
+ 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.
+
+
+
+ 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
+
+
+
+ Deletes the specified directory and all its contents.
+
+ The full or relative path of the directory to delete
+
+
+
+ Deletes a file on the server
+
+ The full or relative path to the file
+
+
+
+ Gets a file listing from the server. Each object returned
+ contains information about the file that was able to be retrieved.
+
+ The path of the directory to list
+ An array of FtpListItem objects
+
+
+
+ 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
+ A FtpListItem object
+
+
+
+ Internal implementation of FTP Client
+
+
+
+
+ Provides functions to read and decode Fanuc FTP files
+
+
+
+
+ Provides functions to read and decode Fanuc FTP diagnostic files *.dg
+
+
+
+
+ Provides functions to read and decode Fanuc FTP variable files *.va
+
+
+
+
+ Provides functions to read and decode Fanuc FTP diagnostic files *.dg
+
+
+
+
+ Provides functions to read and decode Fanuc FTP variable files *.va
+
+
+
+
+ Represents a file system object on the server
+
+
+
+
+ Gets the size of the object.
+
+
+
+
+ Gets the file permissions in the CHMOD format.
+
+
+
+
+ Gets the created date of the object.
+
+
+
+
+ Gets the full path name to the object.
+
+
+
+
+ Gets name to the object.
+
+
+
+
+ Gets the last write time of the object.
+
+
+
+
+ Gets the type of file system object.
+
+
+
+
+ Type of file system of object
+
+
+
+
+ A file
+
+
+
+
+ A directory
+
+
+
+
+ A symbolic link
+
+
+
+
+ Base class for Telnet KCL client
+
+
+
+
+ Connect robot IP address or host name
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ Telnet password associated with KCL user
+
+
+
+ Is Telnet client connected
+
+
+
+
+ Disconnect Telnet client from robot
+
+
+
+
+ Aborts the specified running or paused task. If prog_ name is not specified, the default program Is used.
+ Execution of the current program statement Is completed before the task aborts except for the current motion, DELAY, WAIT, Or READ statements, which are canceled.
+
+ The name of any KAREL or TP program which is a task
+ Aborts all running or paused tasks
+
+
+
+ Aborts all running or paused tasks.
+ Execution of the current program statement Is completed before the task aborts except for the current motion, DELAY, WAIT, Or READ statements, which are canceled.
+
+ Aborts all running or paused tasks
+
+
+
+ Clears all KAREL and teach pendant programs and variable data from memory.
+ All cleared programs And variables (if they were saved with the SaveVars() command) can be reloaded into memory Using the Load() command.
+
+
+
+
+ Clears the program data from memory for the specified or default program.
+
+ The name of any KAREL or teach pendant program in memory
+
+
+
+ Clears the variable and type data associated with the specified or default program from memory.
+ Variables And types that are referenced by a loaded program are Not cleared.
+
+ The name of any KAREL or teach pendant program with variables
+
+
+
+ Continues program execution of the specified task (or all paused tasks if program argument is null) that has been paused by a hold, pause, or test run operation.
+ If the program Is aborted, the program execution Is started at the first executable line.
+ When a task Is paused, the CYCLE START button on the operator panel has the same effect as the Continue() command.
+ Continue is a motion command; therefore, the device from which it Is issued must have motion control.
+
+ The name of any KAREL or teach pendant program which is a task. If null, it continues all paused tasks
+
+
+
+ Pauses the specified or default program that is being executed and holds motion at the current position (after a normal deceleration).
+ Use the Continue() command Or the CYCLE START button On the Operator panel To resume program execution.
+
+ The name of any KAREL or TP program. If null, it holds all executing programs
+
+
+
+ Pauses the specified running task. If program is not specified, the default program is used.
+ Execution of the current motion segment and the current program statement is completed before the task is paused.
+ Condition handlers remain active. If the condition handler action is NOPAUSE and the condition is satisfied, task execution resumes.
+ If the statement is a WAIT FOR and the wait condition is satisfied while the task is paused, the statement following the WAIT FOR is executed immediately when the task is resumed.
+ If the statement is a DELAY, timing will continue while the task is paused.
+ If the delay time is finished while the task is paused, the statement following the DELAY is immediately executed when the task is resumed.
+ If the statement is a READ, it will accept input even though the task is paused.
+ The Continue() command resumes execution of a paused task.
+ When a task is paused, the CYCLE START button on the operator panel has the same effect as the KCL> CONTINUE command.
+
+ the name of any KAREL or TP program which is a task. If null, it pauses all running tasks.
+ Pauses the task even if the NOPAUSE attribute is set
+
+
+
+ Enables servo power after an error condition has shut off servo power, provided the cause of the error has been cleared.
+ The command also clears the message line on the CRT/KB display. The error message remains displayed if the error condition still exists.
+ The Reset() command has no effect on a program that is being executed. It has the same effect as the FAULT RESET button on the operator panel and the RESET function key on the teach pendant RESET screen.
+
+
+
+
+ Executes the specified program. The program must be loaded in memory
+ If no program is specified the default program is run. If uninitialized variables are encountered, program execution is paused.
+ Execution begins at the first executable line.
+ RUN is a motion command; therefore, the device from which it is issued must have motion control. If a RUN command is issued in a command file, it is executed as a NOWAIT command.
+ Therefore, the statement following the RUN command will be executed immediately after the RUN command is issued without waiting for the program, specified by the RUN command, to end. '''
+ The name of any KAREL or TP program.
+
+
+
+ Assigns the specified value to a specified input or output port. SET PORT can be used either physical Or simulated output ports, but only With simulated input ports.
+
+ Port type
+ Port index
+ port value. For boolean ports, true is 1 and 0 is false
+
+
+
+ Assigns the specified value to the specified variable. You can assign constant values or variable values, but the value must be of the data type that has been declared for the variable.
+ You can assign values to system variables with KCL write access, to program variables, or to standard and user-defined variables and fields. You can assign only one ARRAY element.
+ Use brackets ([]) after the variable name to specify an element.
+ Certain data types like positions and vectors might have more than one value specified. '''
+ A valid program variable
+ New value for variable or a program or system variable
+ The name of any KAREL or TP program.
+
+
+
+ Assigns the specified value to the specified variable. You can assign constant values or variable values, but the value must be of the data type that has been declared for the variable.
+ You can assign values to system variables with KCL write access, to program variables, or to standard and user-defined variables and fields. You can assign only one ARRAY element.
+ Use brackets ([]) after the variable name to specify an element.
+ Certain data types like positions and vectors might have more than one value specified. '''
+ A valid program variable
+ New value for variable or a program or system variable
+ The name of any KAREL or TP program.
+
+
+
+ Returns the position of the TCP relative to the current user frame of reference with an x, y, and z location in millimeters; w, p, and r orientation in degrees; and the current configuration string. Be sure the robot is calibrated.
+
+
+
+
+ Returns the status information of the specified or default program being executed.
+
+ The name of any KAREL or TP program in memory
+
+
+
+ Simulating I/O allows you to test a program that uses I/O. Simulating I/O does not actually send output signals or receive input signals.
+ When simulating a port value, you can specify its initial simulated value or allow the initial value to be the same as the physical port value. If no value is specified, the current physical port value is used. '''
+ I/O port type
+ I/O port index
+ New value for the port
+
+
+
+ Skips execution of the current statement in the specified task.
+ If programm is not specified, the default program is used.
+ It has no effect when a task is running or when the system is in a READY state.
+ Entire motion statements are skipped with this command. You cannot skip single motion segments.
+ The Continue() command resumes execution of the paused task with the statement following the last skipped statement. END statements cannot be skipped.
+ If you skip the last RETURN statement in a function routine, there is no way to return the value of the function to the calling program. Therefore, when executing the END statement of the routine, the task will abort.
+ If you skip into a FOR loop, you have skipped the statement that initializes the loop counter. When the ENDFOR statement is executed the program will try to remove the loop counter from the stack. If the FOR loop was nested in another FOR loop, the loop counter for the previous FOR loop will be removed from the stack, causing potentially invalid results. If the FOR loop was not nested, a stack underflow error will occur, causing the task to abort.
+ READ, MOVE, DELAY, WAIT FOR, and PULSE statements can be paused after they have begun execution. In these cases, when the task is resumed, execution of the paused statement must be finished before subsequent statements are executed. Subsequent skipped statements will not be executed.
+ In particular, READ and WAIT FOR statements often require user intervention, such as entering data, before statement execution is completed.
+ Step mode operation and step mode type have no effect on the Skip() command.
+
+ The name of any KAREL or TP program which is a task
+
+
+
+ Discontinues simulation on all input or output port. When a port is unsimulated, the physical value replaces the simulated value.
+
+
+
+
+
+ Discontinues simulation of the specified input or output port. When a port is unsimulated, the physical value replaces the simulated value.
+
+ I/O port type
+ I/O port index to unsimulate
+
+
+
+
+ Internal implementation of KCL Client
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ Telnet password associated with KCL user
+
+
+
+ Main class that represents a connection to a Fanuc Motoman industrial robot
+
+
+
+
+ Create a new instance of a robot communication
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ Telnet password associated with KCL user
+
+
+
+ Information about a license number
+
+
+
+
+ Create a new LicenseInfo instance to retrieve informations about a pair of identifier/key
+ This class should not be used to register your product. Please use static function UnderAutomation.UniversalRobot.UniversalRobotInterface.RegisterLicense to register a license.
+
+ The name of your organization (null for trial version)
+ The key, associated to the identifier, supplied by UnderAutomation (null for trial version)
+
+
+
+ Throw a InvalidLicenseException if the license is Invalid or Expired
+
+
+
+
+ The license key supplied by UnderAutomation (null for trial period)
+
+
+
+
+ Commercial name of this .NET Software library
+
+
+
+
+ Remaining days of the trial period. Null if the product is licensed. It could be negative if the trial period is ended since several days.
+
+
+
+
+ The date the trial period starts. If the product is licensed, the date of the library first use.
+
+
+
+
+ Name of your organisation
+
+
+
+
+ The date the product will expire. Null if the product is licensed.
+
+
+
+
+ The current license state
+
+
+
+
+ The date this version of the product was released.
+
+
+
+
+ Number of maintenance years included in your license
+
+
+
+
+ The date you get the license
+
+
+
+
+ The date your maintenance contract end and you no longer can use this license with newer versions.
+
+
+
+
+ A human description of the license
+
+
+
+
+ States that can take a license
+
+
+
+
+ The pair License Identifier and License Key are incompatible, you cannot use the library
+
+
+
+
+ The library is in a trial period, you can use the library
+
+
+
+
+ The library is in an extra trial period, you can use the library
+
+
+
+
+ The trial period as expired, you no more can use the library
+
+
+
+
+ Your license does not allow you to use such a recent release. Please buy maintenance to use this version
+
+
+
+
+ Congratulations, the library is licensed.
+
+
+
+
+ Exception thrown while using the product if the license is not valid.
+
+
+
+
+ The license that causes this exception
+
+
+
+
diff --git a/.NET/Libraries/net461/UnderAutomation.Fanuc.dll b/.NET/Libraries/net461/UnderAutomation.Fanuc.dll
new file mode 100644
index 0000000..77f0e95
Binary files /dev/null and b/.NET/Libraries/net461/UnderAutomation.Fanuc.dll differ
diff --git a/.NET/Libraries/net461/UnderAutomation.Fanuc.xml b/.NET/Libraries/net461/UnderAutomation.Fanuc.xml
new file mode 100644
index 0000000..e05933f
--- /dev/null
+++ b/.NET/Libraries/net461/UnderAutomation.Fanuc.xml
@@ -0,0 +1,5100 @@
+
+
+
+ UnderAutomation.Fanuc
+
+
+
+
+ Initialize a conenction to the robot with specified parameters
+
+
+
+
+
+ Disconnect all services connected to the robot
+
+
+
+
+ If you have a license And a key, please call this static method to register the product And exit the trial period
+ ou can register a product even if the trial period has ended
+
+ Your organization name
+ The associated key supplied by UnderAutomation
+ Information about the supplied license
+
+
+
+ Return information about your license
+
+
+
+
+ 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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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).
+
+
+
+
+ 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 FTP server. Overwritten in proxy classes.
+
+
+
+
+
+ Connect to the FTP server. Overwritten in proxy classes.
+
+
+
+
+ Called during Connect(). 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.
+
+
+
+
+ Disconnects from the server
+
+
+
+
+ Initiates a disconnection on the server
+
+ method
+ State object
+ IAsyncResult
+
+
+
+
+ Ends a call to
+
+ returned from
+
+
+
+
+ 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
+
+
+
+
+ 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?
+
+
+
+ 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.
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+ 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.
+
+
+
+ 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.
+
+
+
+ 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 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 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-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-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 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.
+
+
+
+
+ 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.
+
+
+
+
+ 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 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.
+
+
+
+ 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.
+
+
+
+
+ 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 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.
+
+
+
+ Download a file from the server and write the data into the given stream.
+ 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.
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+ 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.
+
+
+
+
+ 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 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 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 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
+
+
+
+
+ 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
+
+
+
+ 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 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
+
+
+
+
+ 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.
+
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+
+ 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 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
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+
+ 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 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.
+
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+ 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 "UnderAutomation.Fanuc.Ftp.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
+ 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.
+
+
+ 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
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+
+ 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 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
+
+
+
+ Writes data to the stream
+
+ Buffer to write to stream
+ Where in the buffer to start
+ Number of bytes to be read
+
+
+
+ Writes a line to the stream using the specified encoding
+
+ 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
+
+
+
+ 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 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
+
+
+
+
+ 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)
+
+
+
+
+ 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.
+
+
+
+
+ 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.
+
+
+
+
+ FTP Client connection to a robot
+
+
+
+
+ Instanciate a new FTP client connection
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ FTP username
+ FTP password for username
+
+
+
+ Base class for FTP features
+
+
+
+
+ Provides functions to read and decode Fanuc files
+
+
+
+
+ Connect robot IP address or host name
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ FTP username
+ FTP password for username
+
+
+
+ Indicates that FTP connection is active
+
+
+
+
+ Disconnects from FTP server
+
+
+
+
+ Delegate to track upload progress. The value provided is in the range 0 to 100
+
+ The value provided is in the range 0 to 100
+
+
+
+ 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.
+ It overwrites file if it already exists.
+
+ The full data of the file, as a stream
+ The full or relative path to the file on the server
+ Create the remote directory if it does not exist. Slows down upload due to additional checks required.
+ 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.
+ It overwrites file if it already exists.
+
+ The full data of the file, as a byte array
+ The full or relative path to the file on the server
+ Create the remote directory if it does not exist. Slows down upload due to additional checks required.
+ 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 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
+ Create the remote directory if it does not exist. Slows down upload due to additional checks required.
+ 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.
+
+
+
+ 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
+ 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.
+ 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
+ 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 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.
+ It overwrites the file if it already exists.
+
+ The full or relative path to the file on the local file system
+ 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.
+
+
+
+ Checks if a file exists on the server.
+
+ The full or relative path to the file
+ True if the file exists
+
+
+
+ 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.
+
+
+
+ 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
+
+
+
+ Deletes the specified directory and all its contents.
+
+ The full or relative path of the directory to delete
+
+
+
+ Deletes a file on the server
+
+ The full or relative path to the file
+
+
+
+ Gets a file listing from the server. Each object returned
+ contains information about the file that was able to be retrieved.
+
+ The path of the directory to list
+ An array of FtpListItem objects
+
+
+
+ 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
+ A FtpListItem object
+
+
+
+ Internal implementation of FTP Client
+
+
+
+
+ Provides functions to read and decode Fanuc FTP files
+
+
+
+
+ Provides functions to read and decode Fanuc FTP diagnostic files *.dg
+
+
+
+
+ Provides functions to read and decode Fanuc FTP variable files *.va
+
+
+
+
+ Provides functions to read and decode Fanuc FTP diagnostic files *.dg
+
+
+
+
+ Provides functions to read and decode Fanuc FTP variable files *.va
+
+
+
+
+ Represents a file system object on the server
+
+
+
+
+ Gets the size of the object.
+
+
+
+
+ Gets the file permissions in the CHMOD format.
+
+
+
+
+ Gets the created date of the object.
+
+
+
+
+ Gets the full path name to the object.
+
+
+
+
+ Gets name to the object.
+
+
+
+
+ Gets the last write time of the object.
+
+
+
+
+ Gets the type of file system object.
+
+
+
+
+ Type of file system of object
+
+
+
+
+ A file
+
+
+
+
+ A directory
+
+
+
+
+ A symbolic link
+
+
+
+
+ Base class for Telnet KCL client
+
+
+
+
+ Connect robot IP address or host name
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ Telnet password associated with KCL user
+
+
+
+ Is Telnet client connected
+
+
+
+
+ Disconnect Telnet client from robot
+
+
+
+
+ Aborts the specified running or paused task. If prog_ name is not specified, the default program Is used.
+ Execution of the current program statement Is completed before the task aborts except for the current motion, DELAY, WAIT, Or READ statements, which are canceled.
+
+ The name of any KAREL or TP program which is a task
+ Aborts all running or paused tasks
+
+
+
+ Aborts all running or paused tasks.
+ Execution of the current program statement Is completed before the task aborts except for the current motion, DELAY, WAIT, Or READ statements, which are canceled.
+
+ Aborts all running or paused tasks
+
+
+
+ Clears all KAREL and teach pendant programs and variable data from memory.
+ All cleared programs And variables (if they were saved with the SaveVars() command) can be reloaded into memory Using the Load() command.
+
+
+
+
+ Clears the program data from memory for the specified or default program.
+
+ The name of any KAREL or teach pendant program in memory
+
+
+
+ Clears the variable and type data associated with the specified or default program from memory.
+ Variables And types that are referenced by a loaded program are Not cleared.
+
+ The name of any KAREL or teach pendant program with variables
+
+
+
+ Continues program execution of the specified task (or all paused tasks if program argument is null) that has been paused by a hold, pause, or test run operation.
+ If the program Is aborted, the program execution Is started at the first executable line.
+ When a task Is paused, the CYCLE START button on the operator panel has the same effect as the Continue() command.
+ Continue is a motion command; therefore, the device from which it Is issued must have motion control.
+
+ The name of any KAREL or teach pendant program which is a task. If null, it continues all paused tasks
+
+
+
+ Pauses the specified or default program that is being executed and holds motion at the current position (after a normal deceleration).
+ Use the Continue() command Or the CYCLE START button On the Operator panel To resume program execution.
+
+ The name of any KAREL or TP program. If null, it holds all executing programs
+
+
+
+ Pauses the specified running task. If program is not specified, the default program is used.
+ Execution of the current motion segment and the current program statement is completed before the task is paused.
+ Condition handlers remain active. If the condition handler action is NOPAUSE and the condition is satisfied, task execution resumes.
+ If the statement is a WAIT FOR and the wait condition is satisfied while the task is paused, the statement following the WAIT FOR is executed immediately when the task is resumed.
+ If the statement is a DELAY, timing will continue while the task is paused.
+ If the delay time is finished while the task is paused, the statement following the DELAY is immediately executed when the task is resumed.
+ If the statement is a READ, it will accept input even though the task is paused.
+ The Continue() command resumes execution of a paused task.
+ When a task is paused, the CYCLE START button on the operator panel has the same effect as the KCL> CONTINUE command.
+
+ the name of any KAREL or TP program which is a task. If null, it pauses all running tasks.
+ Pauses the task even if the NOPAUSE attribute is set
+
+
+
+ Enables servo power after an error condition has shut off servo power, provided the cause of the error has been cleared.
+ The command also clears the message line on the CRT/KB display. The error message remains displayed if the error condition still exists.
+ The Reset() command has no effect on a program that is being executed. It has the same effect as the FAULT RESET button on the operator panel and the RESET function key on the teach pendant RESET screen.
+
+
+
+
+ Executes the specified program. The program must be loaded in memory
+ If no program is specified the default program is run. If uninitialized variables are encountered, program execution is paused.
+ Execution begins at the first executable line.
+ RUN is a motion command; therefore, the device from which it is issued must have motion control. If a RUN command is issued in a command file, it is executed as a NOWAIT command.
+ Therefore, the statement following the RUN command will be executed immediately after the RUN command is issued without waiting for the program, specified by the RUN command, to end. '''
+ The name of any KAREL or TP program.
+
+
+
+ Assigns the specified value to a specified input or output port. SET PORT can be used either physical Or simulated output ports, but only With simulated input ports.
+
+ Port type
+ Port index
+ port value. For boolean ports, true is 1 and 0 is false
+
+
+
+ Assigns the specified value to the specified variable. You can assign constant values or variable values, but the value must be of the data type that has been declared for the variable.
+ You can assign values to system variables with KCL write access, to program variables, or to standard and user-defined variables and fields. You can assign only one ARRAY element.
+ Use brackets ([]) after the variable name to specify an element.
+ Certain data types like positions and vectors might have more than one value specified. '''
+ A valid program variable
+ New value for variable or a program or system variable
+ The name of any KAREL or TP program.
+
+
+
+ Assigns the specified value to the specified variable. You can assign constant values or variable values, but the value must be of the data type that has been declared for the variable.
+ You can assign values to system variables with KCL write access, to program variables, or to standard and user-defined variables and fields. You can assign only one ARRAY element.
+ Use brackets ([]) after the variable name to specify an element.
+ Certain data types like positions and vectors might have more than one value specified. '''
+ A valid program variable
+ New value for variable or a program or system variable
+ The name of any KAREL or TP program.
+
+
+
+ Returns the position of the TCP relative to the current user frame of reference with an x, y, and z location in millimeters; w, p, and r orientation in degrees; and the current configuration string. Be sure the robot is calibrated.
+
+
+
+
+ Returns the status information of the specified or default program being executed.
+
+ The name of any KAREL or TP program in memory
+
+
+
+ Simulating I/O allows you to test a program that uses I/O. Simulating I/O does not actually send output signals or receive input signals.
+ When simulating a port value, you can specify its initial simulated value or allow the initial value to be the same as the physical port value. If no value is specified, the current physical port value is used. '''
+ I/O port type
+ I/O port index
+ New value for the port
+
+
+
+ Skips execution of the current statement in the specified task.
+ If programm is not specified, the default program is used.
+ It has no effect when a task is running or when the system is in a READY state.
+ Entire motion statements are skipped with this command. You cannot skip single motion segments.
+ The Continue() command resumes execution of the paused task with the statement following the last skipped statement. END statements cannot be skipped.
+ If you skip the last RETURN statement in a function routine, there is no way to return the value of the function to the calling program. Therefore, when executing the END statement of the routine, the task will abort.
+ If you skip into a FOR loop, you have skipped the statement that initializes the loop counter. When the ENDFOR statement is executed the program will try to remove the loop counter from the stack. If the FOR loop was nested in another FOR loop, the loop counter for the previous FOR loop will be removed from the stack, causing potentially invalid results. If the FOR loop was not nested, a stack underflow error will occur, causing the task to abort.
+ READ, MOVE, DELAY, WAIT FOR, and PULSE statements can be paused after they have begun execution. In these cases, when the task is resumed, execution of the paused statement must be finished before subsequent statements are executed. Subsequent skipped statements will not be executed.
+ In particular, READ and WAIT FOR statements often require user intervention, such as entering data, before statement execution is completed.
+ Step mode operation and step mode type have no effect on the Skip() command.
+
+ The name of any KAREL or TP program which is a task
+
+
+
+ Discontinues simulation on all input or output port. When a port is unsimulated, the physical value replaces the simulated value.
+
+
+
+
+
+ Discontinues simulation of the specified input or output port. When a port is unsimulated, the physical value replaces the simulated value.
+
+ I/O port type
+ I/O port index to unsimulate
+
+
+
+
+ Internal implementation of KCL Client
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ Telnet password associated with KCL user
+
+
+
+ Main class that represents a connection to a Fanuc Motoman industrial robot
+
+
+
+
+ Create a new instance of a robot communication
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ Telnet password associated with KCL user
+
+
+
+ Information about a license number
+
+
+
+
+ Create a new LicenseInfo instance to retrieve informations about a pair of identifier/key
+ This class should not be used to register your product. Please use static function UnderAutomation.UniversalRobot.UniversalRobotInterface.RegisterLicense to register a license.
+
+ The name of your organization (null for trial version)
+ The key, associated to the identifier, supplied by UnderAutomation (null for trial version)
+
+
+
+ Throw a InvalidLicenseException if the license is Invalid or Expired
+
+
+
+
+ The license key supplied by UnderAutomation (null for trial period)
+
+
+
+
+ Commercial name of this .NET Software library
+
+
+
+
+ Remaining days of the trial period. Null if the product is licensed. It could be negative if the trial period is ended since several days.
+
+
+
+
+ The date the trial period starts. If the product is licensed, the date of the library first use.
+
+
+
+
+ Name of your organisation
+
+
+
+
+ The date the product will expire. Null if the product is licensed.
+
+
+
+
+ The current license state
+
+
+
+
+ The date this version of the product was released.
+
+
+
+
+ Number of maintenance years included in your license
+
+
+
+
+ The date you get the license
+
+
+
+
+ The date your maintenance contract end and you no longer can use this license with newer versions.
+
+
+
+
+ A human description of the license
+
+
+
+
+ States that can take a license
+
+
+
+
+ The pair License Identifier and License Key are incompatible, you cannot use the library
+
+
+
+
+ The library is in a trial period, you can use the library
+
+
+
+
+ The library is in an extra trial period, you can use the library
+
+
+
+
+ The trial period as expired, you no more can use the library
+
+
+
+
+ Your license does not allow you to use such a recent release. Please buy maintenance to use this version
+
+
+
+
+ Congratulations, the library is licensed.
+
+
+
+
+ Exception thrown while using the product if the license is not valid.
+
+
+
+
+ The license that causes this exception
+
+
+
+
diff --git a/.NET/Libraries/net462/UnderAutomation.Fanuc.dll b/.NET/Libraries/net462/UnderAutomation.Fanuc.dll
new file mode 100644
index 0000000..4389b88
Binary files /dev/null and b/.NET/Libraries/net462/UnderAutomation.Fanuc.dll differ
diff --git a/.NET/Libraries/net462/UnderAutomation.Fanuc.xml b/.NET/Libraries/net462/UnderAutomation.Fanuc.xml
new file mode 100644
index 0000000..e05933f
--- /dev/null
+++ b/.NET/Libraries/net462/UnderAutomation.Fanuc.xml
@@ -0,0 +1,5100 @@
+
+
+
+ UnderAutomation.Fanuc
+
+
+
+
+ Initialize a conenction to the robot with specified parameters
+
+
+
+
+
+ Disconnect all services connected to the robot
+
+
+
+
+ If you have a license And a key, please call this static method to register the product And exit the trial period
+ ou can register a product even if the trial period has ended
+
+ Your organization name
+ The associated key supplied by UnderAutomation
+ Information about the supplied license
+
+
+
+ Return information about your license
+
+
+
+
+ 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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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).
+
+
+
+
+ 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 FTP server. Overwritten in proxy classes.
+
+
+
+
+
+ Connect to the FTP server. Overwritten in proxy classes.
+
+
+
+
+ Called during Connect(). 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.
+
+
+
+
+ Disconnects from the server
+
+
+
+
+ Initiates a disconnection on the server
+
+ method
+ State object
+ IAsyncResult
+
+
+
+
+ Ends a call to
+
+ returned from
+
+
+
+
+ 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
+
+
+
+
+ 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?
+
+
+
+ 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.
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+ 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.
+
+
+
+ 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.
+
+
+
+ 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 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 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-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-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 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.
+
+
+
+
+ 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.
+
+
+
+
+ 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 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.
+
+
+
+ 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.
+
+
+
+
+ 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 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.
+
+
+
+ Download a file from the server and write the data into the given stream.
+ 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.
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+ 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.
+
+
+
+
+ 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 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 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 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
+
+
+
+
+ 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
+
+
+
+ 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 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
+
+
+
+
+ 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.
+
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+
+ 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 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
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+
+ 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 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.
+
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+ 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 "UnderAutomation.Fanuc.Ftp.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
+ 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.
+
+
+ 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
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+
+ 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 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
+
+
+
+ Writes data to the stream
+
+ Buffer to write to stream
+ Where in the buffer to start
+ Number of bytes to be read
+
+
+
+ Writes a line to the stream using the specified encoding
+
+ 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
+
+
+
+ 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 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
+
+
+
+
+ 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)
+
+
+
+
+ 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.
+
+
+
+
+ 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.
+
+
+
+
+ FTP Client connection to a robot
+
+
+
+
+ Instanciate a new FTP client connection
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ FTP username
+ FTP password for username
+
+
+
+ Base class for FTP features
+
+
+
+
+ Provides functions to read and decode Fanuc files
+
+
+
+
+ Connect robot IP address or host name
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ FTP username
+ FTP password for username
+
+
+
+ Indicates that FTP connection is active
+
+
+
+
+ Disconnects from FTP server
+
+
+
+
+ Delegate to track upload progress. The value provided is in the range 0 to 100
+
+ The value provided is in the range 0 to 100
+
+
+
+ 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.
+ It overwrites file if it already exists.
+
+ The full data of the file, as a stream
+ The full or relative path to the file on the server
+ Create the remote directory if it does not exist. Slows down upload due to additional checks required.
+ 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.
+ It overwrites file if it already exists.
+
+ The full data of the file, as a byte array
+ The full or relative path to the file on the server
+ Create the remote directory if it does not exist. Slows down upload due to additional checks required.
+ 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 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
+ Create the remote directory if it does not exist. Slows down upload due to additional checks required.
+ 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.
+
+
+
+ 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
+ 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.
+ 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
+ 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 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.
+ It overwrites the file if it already exists.
+
+ The full or relative path to the file on the local file system
+ 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.
+
+
+
+ Checks if a file exists on the server.
+
+ The full or relative path to the file
+ True if the file exists
+
+
+
+ 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.
+
+
+
+ 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
+
+
+
+ Deletes the specified directory and all its contents.
+
+ The full or relative path of the directory to delete
+
+
+
+ Deletes a file on the server
+
+ The full or relative path to the file
+
+
+
+ Gets a file listing from the server. Each object returned
+ contains information about the file that was able to be retrieved.
+
+ The path of the directory to list
+ An array of FtpListItem objects
+
+
+
+ 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
+ A FtpListItem object
+
+
+
+ Internal implementation of FTP Client
+
+
+
+
+ Provides functions to read and decode Fanuc FTP files
+
+
+
+
+ Provides functions to read and decode Fanuc FTP diagnostic files *.dg
+
+
+
+
+ Provides functions to read and decode Fanuc FTP variable files *.va
+
+
+
+
+ Provides functions to read and decode Fanuc FTP diagnostic files *.dg
+
+
+
+
+ Provides functions to read and decode Fanuc FTP variable files *.va
+
+
+
+
+ Represents a file system object on the server
+
+
+
+
+ Gets the size of the object.
+
+
+
+
+ Gets the file permissions in the CHMOD format.
+
+
+
+
+ Gets the created date of the object.
+
+
+
+
+ Gets the full path name to the object.
+
+
+
+
+ Gets name to the object.
+
+
+
+
+ Gets the last write time of the object.
+
+
+
+
+ Gets the type of file system object.
+
+
+
+
+ Type of file system of object
+
+
+
+
+ A file
+
+
+
+
+ A directory
+
+
+
+
+ A symbolic link
+
+
+
+
+ Base class for Telnet KCL client
+
+
+
+
+ Connect robot IP address or host name
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ Telnet password associated with KCL user
+
+
+
+ Is Telnet client connected
+
+
+
+
+ Disconnect Telnet client from robot
+
+
+
+
+ Aborts the specified running or paused task. If prog_ name is not specified, the default program Is used.
+ Execution of the current program statement Is completed before the task aborts except for the current motion, DELAY, WAIT, Or READ statements, which are canceled.
+
+ The name of any KAREL or TP program which is a task
+ Aborts all running or paused tasks
+
+
+
+ Aborts all running or paused tasks.
+ Execution of the current program statement Is completed before the task aborts except for the current motion, DELAY, WAIT, Or READ statements, which are canceled.
+
+ Aborts all running or paused tasks
+
+
+
+ Clears all KAREL and teach pendant programs and variable data from memory.
+ All cleared programs And variables (if they were saved with the SaveVars() command) can be reloaded into memory Using the Load() command.
+
+
+
+
+ Clears the program data from memory for the specified or default program.
+
+ The name of any KAREL or teach pendant program in memory
+
+
+
+ Clears the variable and type data associated with the specified or default program from memory.
+ Variables And types that are referenced by a loaded program are Not cleared.
+
+ The name of any KAREL or teach pendant program with variables
+
+
+
+ Continues program execution of the specified task (or all paused tasks if program argument is null) that has been paused by a hold, pause, or test run operation.
+ If the program Is aborted, the program execution Is started at the first executable line.
+ When a task Is paused, the CYCLE START button on the operator panel has the same effect as the Continue() command.
+ Continue is a motion command; therefore, the device from which it Is issued must have motion control.
+
+ The name of any KAREL or teach pendant program which is a task. If null, it continues all paused tasks
+
+
+
+ Pauses the specified or default program that is being executed and holds motion at the current position (after a normal deceleration).
+ Use the Continue() command Or the CYCLE START button On the Operator panel To resume program execution.
+
+ The name of any KAREL or TP program. If null, it holds all executing programs
+
+
+
+ Pauses the specified running task. If program is not specified, the default program is used.
+ Execution of the current motion segment and the current program statement is completed before the task is paused.
+ Condition handlers remain active. If the condition handler action is NOPAUSE and the condition is satisfied, task execution resumes.
+ If the statement is a WAIT FOR and the wait condition is satisfied while the task is paused, the statement following the WAIT FOR is executed immediately when the task is resumed.
+ If the statement is a DELAY, timing will continue while the task is paused.
+ If the delay time is finished while the task is paused, the statement following the DELAY is immediately executed when the task is resumed.
+ If the statement is a READ, it will accept input even though the task is paused.
+ The Continue() command resumes execution of a paused task.
+ When a task is paused, the CYCLE START button on the operator panel has the same effect as the KCL> CONTINUE command.
+
+ the name of any KAREL or TP program which is a task. If null, it pauses all running tasks.
+ Pauses the task even if the NOPAUSE attribute is set
+
+
+
+ Enables servo power after an error condition has shut off servo power, provided the cause of the error has been cleared.
+ The command also clears the message line on the CRT/KB display. The error message remains displayed if the error condition still exists.
+ The Reset() command has no effect on a program that is being executed. It has the same effect as the FAULT RESET button on the operator panel and the RESET function key on the teach pendant RESET screen.
+
+
+
+
+ Executes the specified program. The program must be loaded in memory
+ If no program is specified the default program is run. If uninitialized variables are encountered, program execution is paused.
+ Execution begins at the first executable line.
+ RUN is a motion command; therefore, the device from which it is issued must have motion control. If a RUN command is issued in a command file, it is executed as a NOWAIT command.
+ Therefore, the statement following the RUN command will be executed immediately after the RUN command is issued without waiting for the program, specified by the RUN command, to end. '''
+ The name of any KAREL or TP program.
+
+
+
+ Assigns the specified value to a specified input or output port. SET PORT can be used either physical Or simulated output ports, but only With simulated input ports.
+
+ Port type
+ Port index
+ port value. For boolean ports, true is 1 and 0 is false
+
+
+
+ Assigns the specified value to the specified variable. You can assign constant values or variable values, but the value must be of the data type that has been declared for the variable.
+ You can assign values to system variables with KCL write access, to program variables, or to standard and user-defined variables and fields. You can assign only one ARRAY element.
+ Use brackets ([]) after the variable name to specify an element.
+ Certain data types like positions and vectors might have more than one value specified. '''
+ A valid program variable
+ New value for variable or a program or system variable
+ The name of any KAREL or TP program.
+
+
+
+ Assigns the specified value to the specified variable. You can assign constant values or variable values, but the value must be of the data type that has been declared for the variable.
+ You can assign values to system variables with KCL write access, to program variables, or to standard and user-defined variables and fields. You can assign only one ARRAY element.
+ Use brackets ([]) after the variable name to specify an element.
+ Certain data types like positions and vectors might have more than one value specified. '''
+ A valid program variable
+ New value for variable or a program or system variable
+ The name of any KAREL or TP program.
+
+
+
+ Returns the position of the TCP relative to the current user frame of reference with an x, y, and z location in millimeters; w, p, and r orientation in degrees; and the current configuration string. Be sure the robot is calibrated.
+
+
+
+
+ Returns the status information of the specified or default program being executed.
+
+ The name of any KAREL or TP program in memory
+
+
+
+ Simulating I/O allows you to test a program that uses I/O. Simulating I/O does not actually send output signals or receive input signals.
+ When simulating a port value, you can specify its initial simulated value or allow the initial value to be the same as the physical port value. If no value is specified, the current physical port value is used. '''
+ I/O port type
+ I/O port index
+ New value for the port
+
+
+
+ Skips execution of the current statement in the specified task.
+ If programm is not specified, the default program is used.
+ It has no effect when a task is running or when the system is in a READY state.
+ Entire motion statements are skipped with this command. You cannot skip single motion segments.
+ The Continue() command resumes execution of the paused task with the statement following the last skipped statement. END statements cannot be skipped.
+ If you skip the last RETURN statement in a function routine, there is no way to return the value of the function to the calling program. Therefore, when executing the END statement of the routine, the task will abort.
+ If you skip into a FOR loop, you have skipped the statement that initializes the loop counter. When the ENDFOR statement is executed the program will try to remove the loop counter from the stack. If the FOR loop was nested in another FOR loop, the loop counter for the previous FOR loop will be removed from the stack, causing potentially invalid results. If the FOR loop was not nested, a stack underflow error will occur, causing the task to abort.
+ READ, MOVE, DELAY, WAIT FOR, and PULSE statements can be paused after they have begun execution. In these cases, when the task is resumed, execution of the paused statement must be finished before subsequent statements are executed. Subsequent skipped statements will not be executed.
+ In particular, READ and WAIT FOR statements often require user intervention, such as entering data, before statement execution is completed.
+ Step mode operation and step mode type have no effect on the Skip() command.
+
+ The name of any KAREL or TP program which is a task
+
+
+
+ Discontinues simulation on all input or output port. When a port is unsimulated, the physical value replaces the simulated value.
+
+
+
+
+
+ Discontinues simulation of the specified input or output port. When a port is unsimulated, the physical value replaces the simulated value.
+
+ I/O port type
+ I/O port index to unsimulate
+
+
+
+
+ Internal implementation of KCL Client
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ Telnet password associated with KCL user
+
+
+
+ Main class that represents a connection to a Fanuc Motoman industrial robot
+
+
+
+
+ Create a new instance of a robot communication
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ Telnet password associated with KCL user
+
+
+
+ Information about a license number
+
+
+
+
+ Create a new LicenseInfo instance to retrieve informations about a pair of identifier/key
+ This class should not be used to register your product. Please use static function UnderAutomation.UniversalRobot.UniversalRobotInterface.RegisterLicense to register a license.
+
+ The name of your organization (null for trial version)
+ The key, associated to the identifier, supplied by UnderAutomation (null for trial version)
+
+
+
+ Throw a InvalidLicenseException if the license is Invalid or Expired
+
+
+
+
+ The license key supplied by UnderAutomation (null for trial period)
+
+
+
+
+ Commercial name of this .NET Software library
+
+
+
+
+ Remaining days of the trial period. Null if the product is licensed. It could be negative if the trial period is ended since several days.
+
+
+
+
+ The date the trial period starts. If the product is licensed, the date of the library first use.
+
+
+
+
+ Name of your organisation
+
+
+
+
+ The date the product will expire. Null if the product is licensed.
+
+
+
+
+ The current license state
+
+
+
+
+ The date this version of the product was released.
+
+
+
+
+ Number of maintenance years included in your license
+
+
+
+
+ The date you get the license
+
+
+
+
+ The date your maintenance contract end and you no longer can use this license with newer versions.
+
+
+
+
+ A human description of the license
+
+
+
+
+ States that can take a license
+
+
+
+
+ The pair License Identifier and License Key are incompatible, you cannot use the library
+
+
+
+
+ The library is in a trial period, you can use the library
+
+
+
+
+ The library is in an extra trial period, you can use the library
+
+
+
+
+ The trial period as expired, you no more can use the library
+
+
+
+
+ Your license does not allow you to use such a recent release. Please buy maintenance to use this version
+
+
+
+
+ Congratulations, the library is licensed.
+
+
+
+
+ Exception thrown while using the product if the license is not valid.
+
+
+
+
+ The license that causes this exception
+
+
+
+
diff --git a/.NET/Libraries/net47/UnderAutomation.Fanuc.dll b/.NET/Libraries/net47/UnderAutomation.Fanuc.dll
new file mode 100644
index 0000000..a4febfc
Binary files /dev/null and b/.NET/Libraries/net47/UnderAutomation.Fanuc.dll differ
diff --git a/.NET/Libraries/net47/UnderAutomation.Fanuc.xml b/.NET/Libraries/net47/UnderAutomation.Fanuc.xml
new file mode 100644
index 0000000..e05933f
--- /dev/null
+++ b/.NET/Libraries/net47/UnderAutomation.Fanuc.xml
@@ -0,0 +1,5100 @@
+
+
+
+ UnderAutomation.Fanuc
+
+
+
+
+ Initialize a conenction to the robot with specified parameters
+
+
+
+
+
+ Disconnect all services connected to the robot
+
+
+
+
+ If you have a license And a key, please call this static method to register the product And exit the trial period
+ ou can register a product even if the trial period has ended
+
+ Your organization name
+ The associated key supplied by UnderAutomation
+ Information about the supplied license
+
+
+
+ Return information about your license
+
+
+
+
+ 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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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).
+
+
+
+
+ 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 FTP server. Overwritten in proxy classes.
+
+
+
+
+
+ Connect to the FTP server. Overwritten in proxy classes.
+
+
+
+
+ Called during Connect(). 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.
+
+
+
+
+ Disconnects from the server
+
+
+
+
+ Initiates a disconnection on the server
+
+ method
+ State object
+ IAsyncResult
+
+
+
+
+ Ends a call to
+
+ returned from
+
+
+
+
+ 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
+
+
+
+
+ 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?
+
+
+
+ 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.
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+ 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.
+
+
+
+ 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.
+
+
+
+ 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 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 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-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-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 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.
+
+
+
+
+ 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.
+
+
+
+
+ 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 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.
+
+
+
+ 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.
+
+
+
+
+ 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 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.
+
+
+
+ Download a file from the server and write the data into the given stream.
+ 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.
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+ 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.
+
+
+
+
+ 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 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 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 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
+
+
+
+
+ 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
+
+
+
+ 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 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
+
+
+
+
+ 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.
+
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+
+ 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 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
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+
+ 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 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.
+
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+ 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 "UnderAutomation.Fanuc.Ftp.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
+ 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.
+
+
+ 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
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+
+ 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 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
+
+
+
+ Writes data to the stream
+
+ Buffer to write to stream
+ Where in the buffer to start
+ Number of bytes to be read
+
+
+
+ Writes a line to the stream using the specified encoding
+
+ 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
+
+
+
+ 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 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
+
+
+
+
+ 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)
+
+
+
+
+ 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.
+
+
+
+
+ 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.
+
+
+
+
+ FTP Client connection to a robot
+
+
+
+
+ Instanciate a new FTP client connection
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ FTP username
+ FTP password for username
+
+
+
+ Base class for FTP features
+
+
+
+
+ Provides functions to read and decode Fanuc files
+
+
+
+
+ Connect robot IP address or host name
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ FTP username
+ FTP password for username
+
+
+
+ Indicates that FTP connection is active
+
+
+
+
+ Disconnects from FTP server
+
+
+
+
+ Delegate to track upload progress. The value provided is in the range 0 to 100
+
+ The value provided is in the range 0 to 100
+
+
+
+ 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.
+ It overwrites file if it already exists.
+
+ The full data of the file, as a stream
+ The full or relative path to the file on the server
+ Create the remote directory if it does not exist. Slows down upload due to additional checks required.
+ 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.
+ It overwrites file if it already exists.
+
+ The full data of the file, as a byte array
+ The full or relative path to the file on the server
+ Create the remote directory if it does not exist. Slows down upload due to additional checks required.
+ 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 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
+ Create the remote directory if it does not exist. Slows down upload due to additional checks required.
+ 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.
+
+
+
+ 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
+ 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.
+ 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
+ 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 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.
+ It overwrites the file if it already exists.
+
+ The full or relative path to the file on the local file system
+ 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.
+
+
+
+ Checks if a file exists on the server.
+
+ The full or relative path to the file
+ True if the file exists
+
+
+
+ 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.
+
+
+
+ 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
+
+
+
+ Deletes the specified directory and all its contents.
+
+ The full or relative path of the directory to delete
+
+
+
+ Deletes a file on the server
+
+ The full or relative path to the file
+
+
+
+ Gets a file listing from the server. Each object returned
+ contains information about the file that was able to be retrieved.
+
+ The path of the directory to list
+ An array of FtpListItem objects
+
+
+
+ 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
+ A FtpListItem object
+
+
+
+ Internal implementation of FTP Client
+
+
+
+
+ Provides functions to read and decode Fanuc FTP files
+
+
+
+
+ Provides functions to read and decode Fanuc FTP diagnostic files *.dg
+
+
+
+
+ Provides functions to read and decode Fanuc FTP variable files *.va
+
+
+
+
+ Provides functions to read and decode Fanuc FTP diagnostic files *.dg
+
+
+
+
+ Provides functions to read and decode Fanuc FTP variable files *.va
+
+
+
+
+ Represents a file system object on the server
+
+
+
+
+ Gets the size of the object.
+
+
+
+
+ Gets the file permissions in the CHMOD format.
+
+
+
+
+ Gets the created date of the object.
+
+
+
+
+ Gets the full path name to the object.
+
+
+
+
+ Gets name to the object.
+
+
+
+
+ Gets the last write time of the object.
+
+
+
+
+ Gets the type of file system object.
+
+
+
+
+ Type of file system of object
+
+
+
+
+ A file
+
+
+
+
+ A directory
+
+
+
+
+ A symbolic link
+
+
+
+
+ Base class for Telnet KCL client
+
+
+
+
+ Connect robot IP address or host name
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ Telnet password associated with KCL user
+
+
+
+ Is Telnet client connected
+
+
+
+
+ Disconnect Telnet client from robot
+
+
+
+
+ Aborts the specified running or paused task. If prog_ name is not specified, the default program Is used.
+ Execution of the current program statement Is completed before the task aborts except for the current motion, DELAY, WAIT, Or READ statements, which are canceled.
+
+ The name of any KAREL or TP program which is a task
+ Aborts all running or paused tasks
+
+
+
+ Aborts all running or paused tasks.
+ Execution of the current program statement Is completed before the task aborts except for the current motion, DELAY, WAIT, Or READ statements, which are canceled.
+
+ Aborts all running or paused tasks
+
+
+
+ Clears all KAREL and teach pendant programs and variable data from memory.
+ All cleared programs And variables (if they were saved with the SaveVars() command) can be reloaded into memory Using the Load() command.
+
+
+
+
+ Clears the program data from memory for the specified or default program.
+
+ The name of any KAREL or teach pendant program in memory
+
+
+
+ Clears the variable and type data associated with the specified or default program from memory.
+ Variables And types that are referenced by a loaded program are Not cleared.
+
+ The name of any KAREL or teach pendant program with variables
+
+
+
+ Continues program execution of the specified task (or all paused tasks if program argument is null) that has been paused by a hold, pause, or test run operation.
+ If the program Is aborted, the program execution Is started at the first executable line.
+ When a task Is paused, the CYCLE START button on the operator panel has the same effect as the Continue() command.
+ Continue is a motion command; therefore, the device from which it Is issued must have motion control.
+
+ The name of any KAREL or teach pendant program which is a task. If null, it continues all paused tasks
+
+
+
+ Pauses the specified or default program that is being executed and holds motion at the current position (after a normal deceleration).
+ Use the Continue() command Or the CYCLE START button On the Operator panel To resume program execution.
+
+ The name of any KAREL or TP program. If null, it holds all executing programs
+
+
+
+ Pauses the specified running task. If program is not specified, the default program is used.
+ Execution of the current motion segment and the current program statement is completed before the task is paused.
+ Condition handlers remain active. If the condition handler action is NOPAUSE and the condition is satisfied, task execution resumes.
+ If the statement is a WAIT FOR and the wait condition is satisfied while the task is paused, the statement following the WAIT FOR is executed immediately when the task is resumed.
+ If the statement is a DELAY, timing will continue while the task is paused.
+ If the delay time is finished while the task is paused, the statement following the DELAY is immediately executed when the task is resumed.
+ If the statement is a READ, it will accept input even though the task is paused.
+ The Continue() command resumes execution of a paused task.
+ When a task is paused, the CYCLE START button on the operator panel has the same effect as the KCL> CONTINUE command.
+
+ the name of any KAREL or TP program which is a task. If null, it pauses all running tasks.
+ Pauses the task even if the NOPAUSE attribute is set
+
+
+
+ Enables servo power after an error condition has shut off servo power, provided the cause of the error has been cleared.
+ The command also clears the message line on the CRT/KB display. The error message remains displayed if the error condition still exists.
+ The Reset() command has no effect on a program that is being executed. It has the same effect as the FAULT RESET button on the operator panel and the RESET function key on the teach pendant RESET screen.
+
+
+
+
+ Executes the specified program. The program must be loaded in memory
+ If no program is specified the default program is run. If uninitialized variables are encountered, program execution is paused.
+ Execution begins at the first executable line.
+ RUN is a motion command; therefore, the device from which it is issued must have motion control. If a RUN command is issued in a command file, it is executed as a NOWAIT command.
+ Therefore, the statement following the RUN command will be executed immediately after the RUN command is issued without waiting for the program, specified by the RUN command, to end. '''
+ The name of any KAREL or TP program.
+
+
+
+ Assigns the specified value to a specified input or output port. SET PORT can be used either physical Or simulated output ports, but only With simulated input ports.
+
+ Port type
+ Port index
+ port value. For boolean ports, true is 1 and 0 is false
+
+
+
+ Assigns the specified value to the specified variable. You can assign constant values or variable values, but the value must be of the data type that has been declared for the variable.
+ You can assign values to system variables with KCL write access, to program variables, or to standard and user-defined variables and fields. You can assign only one ARRAY element.
+ Use brackets ([]) after the variable name to specify an element.
+ Certain data types like positions and vectors might have more than one value specified. '''
+ A valid program variable
+ New value for variable or a program or system variable
+ The name of any KAREL or TP program.
+
+
+
+ Assigns the specified value to the specified variable. You can assign constant values or variable values, but the value must be of the data type that has been declared for the variable.
+ You can assign values to system variables with KCL write access, to program variables, or to standard and user-defined variables and fields. You can assign only one ARRAY element.
+ Use brackets ([]) after the variable name to specify an element.
+ Certain data types like positions and vectors might have more than one value specified. '''
+ A valid program variable
+ New value for variable or a program or system variable
+ The name of any KAREL or TP program.
+
+
+
+ Returns the position of the TCP relative to the current user frame of reference with an x, y, and z location in millimeters; w, p, and r orientation in degrees; and the current configuration string. Be sure the robot is calibrated.
+
+
+
+
+ Returns the status information of the specified or default program being executed.
+
+ The name of any KAREL or TP program in memory
+
+
+
+ Simulating I/O allows you to test a program that uses I/O. Simulating I/O does not actually send output signals or receive input signals.
+ When simulating a port value, you can specify its initial simulated value or allow the initial value to be the same as the physical port value. If no value is specified, the current physical port value is used. '''
+ I/O port type
+ I/O port index
+ New value for the port
+
+
+
+ Skips execution of the current statement in the specified task.
+ If programm is not specified, the default program is used.
+ It has no effect when a task is running or when the system is in a READY state.
+ Entire motion statements are skipped with this command. You cannot skip single motion segments.
+ The Continue() command resumes execution of the paused task with the statement following the last skipped statement. END statements cannot be skipped.
+ If you skip the last RETURN statement in a function routine, there is no way to return the value of the function to the calling program. Therefore, when executing the END statement of the routine, the task will abort.
+ If you skip into a FOR loop, you have skipped the statement that initializes the loop counter. When the ENDFOR statement is executed the program will try to remove the loop counter from the stack. If the FOR loop was nested in another FOR loop, the loop counter for the previous FOR loop will be removed from the stack, causing potentially invalid results. If the FOR loop was not nested, a stack underflow error will occur, causing the task to abort.
+ READ, MOVE, DELAY, WAIT FOR, and PULSE statements can be paused after they have begun execution. In these cases, when the task is resumed, execution of the paused statement must be finished before subsequent statements are executed. Subsequent skipped statements will not be executed.
+ In particular, READ and WAIT FOR statements often require user intervention, such as entering data, before statement execution is completed.
+ Step mode operation and step mode type have no effect on the Skip() command.
+
+ The name of any KAREL or TP program which is a task
+
+
+
+ Discontinues simulation on all input or output port. When a port is unsimulated, the physical value replaces the simulated value.
+
+
+
+
+
+ Discontinues simulation of the specified input or output port. When a port is unsimulated, the physical value replaces the simulated value.
+
+ I/O port type
+ I/O port index to unsimulate
+
+
+
+
+ Internal implementation of KCL Client
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ Telnet password associated with KCL user
+
+
+
+ Main class that represents a connection to a Fanuc Motoman industrial robot
+
+
+
+
+ Create a new instance of a robot communication
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ Telnet password associated with KCL user
+
+
+
+ Information about a license number
+
+
+
+
+ Create a new LicenseInfo instance to retrieve informations about a pair of identifier/key
+ This class should not be used to register your product. Please use static function UnderAutomation.UniversalRobot.UniversalRobotInterface.RegisterLicense to register a license.
+
+ The name of your organization (null for trial version)
+ The key, associated to the identifier, supplied by UnderAutomation (null for trial version)
+
+
+
+ Throw a InvalidLicenseException if the license is Invalid or Expired
+
+
+
+
+ The license key supplied by UnderAutomation (null for trial period)
+
+
+
+
+ Commercial name of this .NET Software library
+
+
+
+
+ Remaining days of the trial period. Null if the product is licensed. It could be negative if the trial period is ended since several days.
+
+
+
+
+ The date the trial period starts. If the product is licensed, the date of the library first use.
+
+
+
+
+ Name of your organisation
+
+
+
+
+ The date the product will expire. Null if the product is licensed.
+
+
+
+
+ The current license state
+
+
+
+
+ The date this version of the product was released.
+
+
+
+
+ Number of maintenance years included in your license
+
+
+
+
+ The date you get the license
+
+
+
+
+ The date your maintenance contract end and you no longer can use this license with newer versions.
+
+
+
+
+ A human description of the license
+
+
+
+
+ States that can take a license
+
+
+
+
+ The pair License Identifier and License Key are incompatible, you cannot use the library
+
+
+
+
+ The library is in a trial period, you can use the library
+
+
+
+
+ The library is in an extra trial period, you can use the library
+
+
+
+
+ The trial period as expired, you no more can use the library
+
+
+
+
+ Your license does not allow you to use such a recent release. Please buy maintenance to use this version
+
+
+
+
+ Congratulations, the library is licensed.
+
+
+
+
+ Exception thrown while using the product if the license is not valid.
+
+
+
+
+ The license that causes this exception
+
+
+
+
diff --git a/.NET/Libraries/net471/UnderAutomation.Fanuc.dll b/.NET/Libraries/net471/UnderAutomation.Fanuc.dll
new file mode 100644
index 0000000..cdd9dc8
Binary files /dev/null and b/.NET/Libraries/net471/UnderAutomation.Fanuc.dll differ
diff --git a/.NET/Libraries/net471/UnderAutomation.Fanuc.xml b/.NET/Libraries/net471/UnderAutomation.Fanuc.xml
new file mode 100644
index 0000000..e05933f
--- /dev/null
+++ b/.NET/Libraries/net471/UnderAutomation.Fanuc.xml
@@ -0,0 +1,5100 @@
+
+
+
+ UnderAutomation.Fanuc
+
+
+
+
+ Initialize a conenction to the robot with specified parameters
+
+
+
+
+
+ Disconnect all services connected to the robot
+
+
+
+
+ If you have a license And a key, please call this static method to register the product And exit the trial period
+ ou can register a product even if the trial period has ended
+
+ Your organization name
+ The associated key supplied by UnderAutomation
+ Information about the supplied license
+
+
+
+ Return information about your license
+
+
+
+
+ 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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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).
+
+
+
+
+ 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 FTP server. Overwritten in proxy classes.
+
+
+
+
+
+ Connect to the FTP server. Overwritten in proxy classes.
+
+
+
+
+ Called during Connect(). 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.
+
+
+
+
+ Disconnects from the server
+
+
+
+
+ Initiates a disconnection on the server
+
+ method
+ State object
+ IAsyncResult
+
+
+
+
+ Ends a call to
+
+ returned from
+
+
+
+
+ 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
+
+
+
+
+ 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?
+
+
+
+ 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.
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+ 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.
+
+
+
+ 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.
+
+
+
+ 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 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 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-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-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 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.
+
+
+
+
+ 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.
+
+
+
+
+ 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 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.
+
+
+
+ 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.
+
+
+
+
+ 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 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.
+
+
+
+ Download a file from the server and write the data into the given stream.
+ 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.
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+ 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.
+
+
+
+
+ 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 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 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 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
+
+
+
+
+ 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
+
+
+
+ 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 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
+
+
+
+
+ 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.
+
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+
+ 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 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
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+
+ 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 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.
+
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+ 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 "UnderAutomation.Fanuc.Ftp.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
+ 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.
+
+
+ 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
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+
+ 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 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
+
+
+
+ Writes data to the stream
+
+ Buffer to write to stream
+ Where in the buffer to start
+ Number of bytes to be read
+
+
+
+ Writes a line to the stream using the specified encoding
+
+ 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
+
+
+
+ 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 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
+
+
+
+
+ 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)
+
+
+
+
+ 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.
+
+
+
+
+ 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.
+
+
+
+
+ FTP Client connection to a robot
+
+
+
+
+ Instanciate a new FTP client connection
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ FTP username
+ FTP password for username
+
+
+
+ Base class for FTP features
+
+
+
+
+ Provides functions to read and decode Fanuc files
+
+
+
+
+ Connect robot IP address or host name
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ FTP username
+ FTP password for username
+
+
+
+ Indicates that FTP connection is active
+
+
+
+
+ Disconnects from FTP server
+
+
+
+
+ Delegate to track upload progress. The value provided is in the range 0 to 100
+
+ The value provided is in the range 0 to 100
+
+
+
+ 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.
+ It overwrites file if it already exists.
+
+ The full data of the file, as a stream
+ The full or relative path to the file on the server
+ Create the remote directory if it does not exist. Slows down upload due to additional checks required.
+ 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.
+ It overwrites file if it already exists.
+
+ The full data of the file, as a byte array
+ The full or relative path to the file on the server
+ Create the remote directory if it does not exist. Slows down upload due to additional checks required.
+ 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 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
+ Create the remote directory if it does not exist. Slows down upload due to additional checks required.
+ 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.
+
+
+
+ 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
+ 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.
+ 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
+ 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 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.
+ It overwrites the file if it already exists.
+
+ The full or relative path to the file on the local file system
+ 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.
+
+
+
+ Checks if a file exists on the server.
+
+ The full or relative path to the file
+ True if the file exists
+
+
+
+ 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.
+
+
+
+ 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
+
+
+
+ Deletes the specified directory and all its contents.
+
+ The full or relative path of the directory to delete
+
+
+
+ Deletes a file on the server
+
+ The full or relative path to the file
+
+
+
+ Gets a file listing from the server. Each object returned
+ contains information about the file that was able to be retrieved.
+
+ The path of the directory to list
+ An array of FtpListItem objects
+
+
+
+ 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
+ A FtpListItem object
+
+
+
+ Internal implementation of FTP Client
+
+
+
+
+ Provides functions to read and decode Fanuc FTP files
+
+
+
+
+ Provides functions to read and decode Fanuc FTP diagnostic files *.dg
+
+
+
+
+ Provides functions to read and decode Fanuc FTP variable files *.va
+
+
+
+
+ Provides functions to read and decode Fanuc FTP diagnostic files *.dg
+
+
+
+
+ Provides functions to read and decode Fanuc FTP variable files *.va
+
+
+
+
+ Represents a file system object on the server
+
+
+
+
+ Gets the size of the object.
+
+
+
+
+ Gets the file permissions in the CHMOD format.
+
+
+
+
+ Gets the created date of the object.
+
+
+
+
+ Gets the full path name to the object.
+
+
+
+
+ Gets name to the object.
+
+
+
+
+ Gets the last write time of the object.
+
+
+
+
+ Gets the type of file system object.
+
+
+
+
+ Type of file system of object
+
+
+
+
+ A file
+
+
+
+
+ A directory
+
+
+
+
+ A symbolic link
+
+
+
+
+ Base class for Telnet KCL client
+
+
+
+
+ Connect robot IP address or host name
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ Telnet password associated with KCL user
+
+
+
+ Is Telnet client connected
+
+
+
+
+ Disconnect Telnet client from robot
+
+
+
+
+ Aborts the specified running or paused task. If prog_ name is not specified, the default program Is used.
+ Execution of the current program statement Is completed before the task aborts except for the current motion, DELAY, WAIT, Or READ statements, which are canceled.
+
+ The name of any KAREL or TP program which is a task
+ Aborts all running or paused tasks
+
+
+
+ Aborts all running or paused tasks.
+ Execution of the current program statement Is completed before the task aborts except for the current motion, DELAY, WAIT, Or READ statements, which are canceled.
+
+ Aborts all running or paused tasks
+
+
+
+ Clears all KAREL and teach pendant programs and variable data from memory.
+ All cleared programs And variables (if they were saved with the SaveVars() command) can be reloaded into memory Using the Load() command.
+
+
+
+
+ Clears the program data from memory for the specified or default program.
+
+ The name of any KAREL or teach pendant program in memory
+
+
+
+ Clears the variable and type data associated with the specified or default program from memory.
+ Variables And types that are referenced by a loaded program are Not cleared.
+
+ The name of any KAREL or teach pendant program with variables
+
+
+
+ Continues program execution of the specified task (or all paused tasks if program argument is null) that has been paused by a hold, pause, or test run operation.
+ If the program Is aborted, the program execution Is started at the first executable line.
+ When a task Is paused, the CYCLE START button on the operator panel has the same effect as the Continue() command.
+ Continue is a motion command; therefore, the device from which it Is issued must have motion control.
+
+ The name of any KAREL or teach pendant program which is a task. If null, it continues all paused tasks
+
+
+
+ Pauses the specified or default program that is being executed and holds motion at the current position (after a normal deceleration).
+ Use the Continue() command Or the CYCLE START button On the Operator panel To resume program execution.
+
+ The name of any KAREL or TP program. If null, it holds all executing programs
+
+
+
+ Pauses the specified running task. If program is not specified, the default program is used.
+ Execution of the current motion segment and the current program statement is completed before the task is paused.
+ Condition handlers remain active. If the condition handler action is NOPAUSE and the condition is satisfied, task execution resumes.
+ If the statement is a WAIT FOR and the wait condition is satisfied while the task is paused, the statement following the WAIT FOR is executed immediately when the task is resumed.
+ If the statement is a DELAY, timing will continue while the task is paused.
+ If the delay time is finished while the task is paused, the statement following the DELAY is immediately executed when the task is resumed.
+ If the statement is a READ, it will accept input even though the task is paused.
+ The Continue() command resumes execution of a paused task.
+ When a task is paused, the CYCLE START button on the operator panel has the same effect as the KCL> CONTINUE command.
+
+ the name of any KAREL or TP program which is a task. If null, it pauses all running tasks.
+ Pauses the task even if the NOPAUSE attribute is set
+
+
+
+ Enables servo power after an error condition has shut off servo power, provided the cause of the error has been cleared.
+ The command also clears the message line on the CRT/KB display. The error message remains displayed if the error condition still exists.
+ The Reset() command has no effect on a program that is being executed. It has the same effect as the FAULT RESET button on the operator panel and the RESET function key on the teach pendant RESET screen.
+
+
+
+
+ Executes the specified program. The program must be loaded in memory
+ If no program is specified the default program is run. If uninitialized variables are encountered, program execution is paused.
+ Execution begins at the first executable line.
+ RUN is a motion command; therefore, the device from which it is issued must have motion control. If a RUN command is issued in a command file, it is executed as a NOWAIT command.
+ Therefore, the statement following the RUN command will be executed immediately after the RUN command is issued without waiting for the program, specified by the RUN command, to end. '''
+ The name of any KAREL or TP program.
+
+
+
+ Assigns the specified value to a specified input or output port. SET PORT can be used either physical Or simulated output ports, but only With simulated input ports.
+
+ Port type
+ Port index
+ port value. For boolean ports, true is 1 and 0 is false
+
+
+
+ Assigns the specified value to the specified variable. You can assign constant values or variable values, but the value must be of the data type that has been declared for the variable.
+ You can assign values to system variables with KCL write access, to program variables, or to standard and user-defined variables and fields. You can assign only one ARRAY element.
+ Use brackets ([]) after the variable name to specify an element.
+ Certain data types like positions and vectors might have more than one value specified. '''
+ A valid program variable
+ New value for variable or a program or system variable
+ The name of any KAREL or TP program.
+
+
+
+ Assigns the specified value to the specified variable. You can assign constant values or variable values, but the value must be of the data type that has been declared for the variable.
+ You can assign values to system variables with KCL write access, to program variables, or to standard and user-defined variables and fields. You can assign only one ARRAY element.
+ Use brackets ([]) after the variable name to specify an element.
+ Certain data types like positions and vectors might have more than one value specified. '''
+ A valid program variable
+ New value for variable or a program or system variable
+ The name of any KAREL or TP program.
+
+
+
+ Returns the position of the TCP relative to the current user frame of reference with an x, y, and z location in millimeters; w, p, and r orientation in degrees; and the current configuration string. Be sure the robot is calibrated.
+
+
+
+
+ Returns the status information of the specified or default program being executed.
+
+ The name of any KAREL or TP program in memory
+
+
+
+ Simulating I/O allows you to test a program that uses I/O. Simulating I/O does not actually send output signals or receive input signals.
+ When simulating a port value, you can specify its initial simulated value or allow the initial value to be the same as the physical port value. If no value is specified, the current physical port value is used. '''
+ I/O port type
+ I/O port index
+ New value for the port
+
+
+
+ Skips execution of the current statement in the specified task.
+ If programm is not specified, the default program is used.
+ It has no effect when a task is running or when the system is in a READY state.
+ Entire motion statements are skipped with this command. You cannot skip single motion segments.
+ The Continue() command resumes execution of the paused task with the statement following the last skipped statement. END statements cannot be skipped.
+ If you skip the last RETURN statement in a function routine, there is no way to return the value of the function to the calling program. Therefore, when executing the END statement of the routine, the task will abort.
+ If you skip into a FOR loop, you have skipped the statement that initializes the loop counter. When the ENDFOR statement is executed the program will try to remove the loop counter from the stack. If the FOR loop was nested in another FOR loop, the loop counter for the previous FOR loop will be removed from the stack, causing potentially invalid results. If the FOR loop was not nested, a stack underflow error will occur, causing the task to abort.
+ READ, MOVE, DELAY, WAIT FOR, and PULSE statements can be paused after they have begun execution. In these cases, when the task is resumed, execution of the paused statement must be finished before subsequent statements are executed. Subsequent skipped statements will not be executed.
+ In particular, READ and WAIT FOR statements often require user intervention, such as entering data, before statement execution is completed.
+ Step mode operation and step mode type have no effect on the Skip() command.
+
+ The name of any KAREL or TP program which is a task
+
+
+
+ Discontinues simulation on all input or output port. When a port is unsimulated, the physical value replaces the simulated value.
+
+
+
+
+
+ Discontinues simulation of the specified input or output port. When a port is unsimulated, the physical value replaces the simulated value.
+
+ I/O port type
+ I/O port index to unsimulate
+
+
+
+
+ Internal implementation of KCL Client
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ Telnet password associated with KCL user
+
+
+
+ Main class that represents a connection to a Fanuc Motoman industrial robot
+
+
+
+
+ Create a new instance of a robot communication
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ Telnet password associated with KCL user
+
+
+
+ Information about a license number
+
+
+
+
+ Create a new LicenseInfo instance to retrieve informations about a pair of identifier/key
+ This class should not be used to register your product. Please use static function UnderAutomation.UniversalRobot.UniversalRobotInterface.RegisterLicense to register a license.
+
+ The name of your organization (null for trial version)
+ The key, associated to the identifier, supplied by UnderAutomation (null for trial version)
+
+
+
+ Throw a InvalidLicenseException if the license is Invalid or Expired
+
+
+
+
+ The license key supplied by UnderAutomation (null for trial period)
+
+
+
+
+ Commercial name of this .NET Software library
+
+
+
+
+ Remaining days of the trial period. Null if the product is licensed. It could be negative if the trial period is ended since several days.
+
+
+
+
+ The date the trial period starts. If the product is licensed, the date of the library first use.
+
+
+
+
+ Name of your organisation
+
+
+
+
+ The date the product will expire. Null if the product is licensed.
+
+
+
+
+ The current license state
+
+
+
+
+ The date this version of the product was released.
+
+
+
+
+ Number of maintenance years included in your license
+
+
+
+
+ The date you get the license
+
+
+
+
+ The date your maintenance contract end and you no longer can use this license with newer versions.
+
+
+
+
+ A human description of the license
+
+
+
+
+ States that can take a license
+
+
+
+
+ The pair License Identifier and License Key are incompatible, you cannot use the library
+
+
+
+
+ The library is in a trial period, you can use the library
+
+
+
+
+ The library is in an extra trial period, you can use the library
+
+
+
+
+ The trial period as expired, you no more can use the library
+
+
+
+
+ Your license does not allow you to use such a recent release. Please buy maintenance to use this version
+
+
+
+
+ Congratulations, the library is licensed.
+
+
+
+
+ Exception thrown while using the product if the license is not valid.
+
+
+
+
+ The license that causes this exception
+
+
+
+
diff --git a/.NET/Libraries/net472/UnderAutomation.Fanuc.dll b/.NET/Libraries/net472/UnderAutomation.Fanuc.dll
new file mode 100644
index 0000000..0f3943a
Binary files /dev/null and b/.NET/Libraries/net472/UnderAutomation.Fanuc.dll differ
diff --git a/.NET/Libraries/net472/UnderAutomation.Fanuc.xml b/.NET/Libraries/net472/UnderAutomation.Fanuc.xml
new file mode 100644
index 0000000..e05933f
--- /dev/null
+++ b/.NET/Libraries/net472/UnderAutomation.Fanuc.xml
@@ -0,0 +1,5100 @@
+
+
+
+ UnderAutomation.Fanuc
+
+
+
+
+ Initialize a conenction to the robot with specified parameters
+
+
+
+
+
+ Disconnect all services connected to the robot
+
+
+
+
+ If you have a license And a key, please call this static method to register the product And exit the trial period
+ ou can register a product even if the trial period has ended
+
+ Your organization name
+ The associated key supplied by UnderAutomation
+ Information about the supplied license
+
+
+
+ Return information about your license
+
+
+
+
+ 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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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).
+
+
+
+
+ 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 FTP server. Overwritten in proxy classes.
+
+
+
+
+
+ Connect to the FTP server. Overwritten in proxy classes.
+
+
+
+
+ Called during Connect(). 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.
+
+
+
+
+ Disconnects from the server
+
+
+
+
+ Initiates a disconnection on the server
+
+ method
+ State object
+ IAsyncResult
+
+
+
+
+ Ends a call to
+
+ returned from
+
+
+
+
+ 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
+
+
+
+
+ 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?
+
+
+
+ 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.
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+ 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.
+
+
+
+ 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.
+
+
+
+ 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 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 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-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-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 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.
+
+
+
+
+ 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.
+
+
+
+
+ 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 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.
+
+
+
+ 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.
+
+
+
+
+ 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 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.
+
+
+
+ Download a file from the server and write the data into the given stream.
+ 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.
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+ 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.
+
+
+
+
+ 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 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 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 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
+
+
+
+
+ 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
+
+
+
+ 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 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
+
+
+
+
+ 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.
+
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+
+ 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 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
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+
+ 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 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.
+
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+ 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 "UnderAutomation.Fanuc.Ftp.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
+ 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.
+
+
+ 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
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+
+ 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 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
+
+
+
+ Writes data to the stream
+
+ Buffer to write to stream
+ Where in the buffer to start
+ Number of bytes to be read
+
+
+
+ Writes a line to the stream using the specified encoding
+
+ 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
+
+
+
+ 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 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
+
+
+
+
+ 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)
+
+
+
+
+ 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.
+
+
+
+
+ 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.
+
+
+
+
+ FTP Client connection to a robot
+
+
+
+
+ Instanciate a new FTP client connection
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ FTP username
+ FTP password for username
+
+
+
+ Base class for FTP features
+
+
+
+
+ Provides functions to read and decode Fanuc files
+
+
+
+
+ Connect robot IP address or host name
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ FTP username
+ FTP password for username
+
+
+
+ Indicates that FTP connection is active
+
+
+
+
+ Disconnects from FTP server
+
+
+
+
+ Delegate to track upload progress. The value provided is in the range 0 to 100
+
+ The value provided is in the range 0 to 100
+
+
+
+ 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.
+ It overwrites file if it already exists.
+
+ The full data of the file, as a stream
+ The full or relative path to the file on the server
+ Create the remote directory if it does not exist. Slows down upload due to additional checks required.
+ 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.
+ It overwrites file if it already exists.
+
+ The full data of the file, as a byte array
+ The full or relative path to the file on the server
+ Create the remote directory if it does not exist. Slows down upload due to additional checks required.
+ 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 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
+ Create the remote directory if it does not exist. Slows down upload due to additional checks required.
+ 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.
+
+
+
+ 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
+ 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.
+ 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
+ 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 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.
+ It overwrites the file if it already exists.
+
+ The full or relative path to the file on the local file system
+ 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.
+
+
+
+ Checks if a file exists on the server.
+
+ The full or relative path to the file
+ True if the file exists
+
+
+
+ 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.
+
+
+
+ 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
+
+
+
+ Deletes the specified directory and all its contents.
+
+ The full or relative path of the directory to delete
+
+
+
+ Deletes a file on the server
+
+ The full or relative path to the file
+
+
+
+ Gets a file listing from the server. Each object returned
+ contains information about the file that was able to be retrieved.
+
+ The path of the directory to list
+ An array of FtpListItem objects
+
+
+
+ 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
+ A FtpListItem object
+
+
+
+ Internal implementation of FTP Client
+
+
+
+
+ Provides functions to read and decode Fanuc FTP files
+
+
+
+
+ Provides functions to read and decode Fanuc FTP diagnostic files *.dg
+
+
+
+
+ Provides functions to read and decode Fanuc FTP variable files *.va
+
+
+
+
+ Provides functions to read and decode Fanuc FTP diagnostic files *.dg
+
+
+
+
+ Provides functions to read and decode Fanuc FTP variable files *.va
+
+
+
+
+ Represents a file system object on the server
+
+
+
+
+ Gets the size of the object.
+
+
+
+
+ Gets the file permissions in the CHMOD format.
+
+
+
+
+ Gets the created date of the object.
+
+
+
+
+ Gets the full path name to the object.
+
+
+
+
+ Gets name to the object.
+
+
+
+
+ Gets the last write time of the object.
+
+
+
+
+ Gets the type of file system object.
+
+
+
+
+ Type of file system of object
+
+
+
+
+ A file
+
+
+
+
+ A directory
+
+
+
+
+ A symbolic link
+
+
+
+
+ Base class for Telnet KCL client
+
+
+
+
+ Connect robot IP address or host name
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ Telnet password associated with KCL user
+
+
+
+ Is Telnet client connected
+
+
+
+
+ Disconnect Telnet client from robot
+
+
+
+
+ Aborts the specified running or paused task. If prog_ name is not specified, the default program Is used.
+ Execution of the current program statement Is completed before the task aborts except for the current motion, DELAY, WAIT, Or READ statements, which are canceled.
+
+ The name of any KAREL or TP program which is a task
+ Aborts all running or paused tasks
+
+
+
+ Aborts all running or paused tasks.
+ Execution of the current program statement Is completed before the task aborts except for the current motion, DELAY, WAIT, Or READ statements, which are canceled.
+
+ Aborts all running or paused tasks
+
+
+
+ Clears all KAREL and teach pendant programs and variable data from memory.
+ All cleared programs And variables (if they were saved with the SaveVars() command) can be reloaded into memory Using the Load() command.
+
+
+
+
+ Clears the program data from memory for the specified or default program.
+
+ The name of any KAREL or teach pendant program in memory
+
+
+
+ Clears the variable and type data associated with the specified or default program from memory.
+ Variables And types that are referenced by a loaded program are Not cleared.
+
+ The name of any KAREL or teach pendant program with variables
+
+
+
+ Continues program execution of the specified task (or all paused tasks if program argument is null) that has been paused by a hold, pause, or test run operation.
+ If the program Is aborted, the program execution Is started at the first executable line.
+ When a task Is paused, the CYCLE START button on the operator panel has the same effect as the Continue() command.
+ Continue is a motion command; therefore, the device from which it Is issued must have motion control.
+
+ The name of any KAREL or teach pendant program which is a task. If null, it continues all paused tasks
+
+
+
+ Pauses the specified or default program that is being executed and holds motion at the current position (after a normal deceleration).
+ Use the Continue() command Or the CYCLE START button On the Operator panel To resume program execution.
+
+ The name of any KAREL or TP program. If null, it holds all executing programs
+
+
+
+ Pauses the specified running task. If program is not specified, the default program is used.
+ Execution of the current motion segment and the current program statement is completed before the task is paused.
+ Condition handlers remain active. If the condition handler action is NOPAUSE and the condition is satisfied, task execution resumes.
+ If the statement is a WAIT FOR and the wait condition is satisfied while the task is paused, the statement following the WAIT FOR is executed immediately when the task is resumed.
+ If the statement is a DELAY, timing will continue while the task is paused.
+ If the delay time is finished while the task is paused, the statement following the DELAY is immediately executed when the task is resumed.
+ If the statement is a READ, it will accept input even though the task is paused.
+ The Continue() command resumes execution of a paused task.
+ When a task is paused, the CYCLE START button on the operator panel has the same effect as the KCL> CONTINUE command.
+
+ the name of any KAREL or TP program which is a task. If null, it pauses all running tasks.
+ Pauses the task even if the NOPAUSE attribute is set
+
+
+
+ Enables servo power after an error condition has shut off servo power, provided the cause of the error has been cleared.
+ The command also clears the message line on the CRT/KB display. The error message remains displayed if the error condition still exists.
+ The Reset() command has no effect on a program that is being executed. It has the same effect as the FAULT RESET button on the operator panel and the RESET function key on the teach pendant RESET screen.
+
+
+
+
+ Executes the specified program. The program must be loaded in memory
+ If no program is specified the default program is run. If uninitialized variables are encountered, program execution is paused.
+ Execution begins at the first executable line.
+ RUN is a motion command; therefore, the device from which it is issued must have motion control. If a RUN command is issued in a command file, it is executed as a NOWAIT command.
+ Therefore, the statement following the RUN command will be executed immediately after the RUN command is issued without waiting for the program, specified by the RUN command, to end. '''
+ The name of any KAREL or TP program.
+
+
+
+ Assigns the specified value to a specified input or output port. SET PORT can be used either physical Or simulated output ports, but only With simulated input ports.
+
+ Port type
+ Port index
+ port value. For boolean ports, true is 1 and 0 is false
+
+
+
+ Assigns the specified value to the specified variable. You can assign constant values or variable values, but the value must be of the data type that has been declared for the variable.
+ You can assign values to system variables with KCL write access, to program variables, or to standard and user-defined variables and fields. You can assign only one ARRAY element.
+ Use brackets ([]) after the variable name to specify an element.
+ Certain data types like positions and vectors might have more than one value specified. '''
+ A valid program variable
+ New value for variable or a program or system variable
+ The name of any KAREL or TP program.
+
+
+
+ Assigns the specified value to the specified variable. You can assign constant values or variable values, but the value must be of the data type that has been declared for the variable.
+ You can assign values to system variables with KCL write access, to program variables, or to standard and user-defined variables and fields. You can assign only one ARRAY element.
+ Use brackets ([]) after the variable name to specify an element.
+ Certain data types like positions and vectors might have more than one value specified. '''
+ A valid program variable
+ New value for variable or a program or system variable
+ The name of any KAREL or TP program.
+
+
+
+ Returns the position of the TCP relative to the current user frame of reference with an x, y, and z location in millimeters; w, p, and r orientation in degrees; and the current configuration string. Be sure the robot is calibrated.
+
+
+
+
+ Returns the status information of the specified or default program being executed.
+
+ The name of any KAREL or TP program in memory
+
+
+
+ Simulating I/O allows you to test a program that uses I/O. Simulating I/O does not actually send output signals or receive input signals.
+ When simulating a port value, you can specify its initial simulated value or allow the initial value to be the same as the physical port value. If no value is specified, the current physical port value is used. '''
+ I/O port type
+ I/O port index
+ New value for the port
+
+
+
+ Skips execution of the current statement in the specified task.
+ If programm is not specified, the default program is used.
+ It has no effect when a task is running or when the system is in a READY state.
+ Entire motion statements are skipped with this command. You cannot skip single motion segments.
+ The Continue() command resumes execution of the paused task with the statement following the last skipped statement. END statements cannot be skipped.
+ If you skip the last RETURN statement in a function routine, there is no way to return the value of the function to the calling program. Therefore, when executing the END statement of the routine, the task will abort.
+ If you skip into a FOR loop, you have skipped the statement that initializes the loop counter. When the ENDFOR statement is executed the program will try to remove the loop counter from the stack. If the FOR loop was nested in another FOR loop, the loop counter for the previous FOR loop will be removed from the stack, causing potentially invalid results. If the FOR loop was not nested, a stack underflow error will occur, causing the task to abort.
+ READ, MOVE, DELAY, WAIT FOR, and PULSE statements can be paused after they have begun execution. In these cases, when the task is resumed, execution of the paused statement must be finished before subsequent statements are executed. Subsequent skipped statements will not be executed.
+ In particular, READ and WAIT FOR statements often require user intervention, such as entering data, before statement execution is completed.
+ Step mode operation and step mode type have no effect on the Skip() command.
+
+ The name of any KAREL or TP program which is a task
+
+
+
+ Discontinues simulation on all input or output port. When a port is unsimulated, the physical value replaces the simulated value.
+
+
+
+
+
+ Discontinues simulation of the specified input or output port. When a port is unsimulated, the physical value replaces the simulated value.
+
+ I/O port type
+ I/O port index to unsimulate
+
+
+
+
+ Internal implementation of KCL Client
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ Telnet password associated with KCL user
+
+
+
+ Main class that represents a connection to a Fanuc Motoman industrial robot
+
+
+
+
+ Create a new instance of a robot communication
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ Telnet password associated with KCL user
+
+
+
+ Information about a license number
+
+
+
+
+ Create a new LicenseInfo instance to retrieve informations about a pair of identifier/key
+ This class should not be used to register your product. Please use static function UnderAutomation.UniversalRobot.UniversalRobotInterface.RegisterLicense to register a license.
+
+ The name of your organization (null for trial version)
+ The key, associated to the identifier, supplied by UnderAutomation (null for trial version)
+
+
+
+ Throw a InvalidLicenseException if the license is Invalid or Expired
+
+
+
+
+ The license key supplied by UnderAutomation (null for trial period)
+
+
+
+
+ Commercial name of this .NET Software library
+
+
+
+
+ Remaining days of the trial period. Null if the product is licensed. It could be negative if the trial period is ended since several days.
+
+
+
+
+ The date the trial period starts. If the product is licensed, the date of the library first use.
+
+
+
+
+ Name of your organisation
+
+
+
+
+ The date the product will expire. Null if the product is licensed.
+
+
+
+
+ The current license state
+
+
+
+
+ The date this version of the product was released.
+
+
+
+
+ Number of maintenance years included in your license
+
+
+
+
+ The date you get the license
+
+
+
+
+ The date your maintenance contract end and you no longer can use this license with newer versions.
+
+
+
+
+ A human description of the license
+
+
+
+
+ States that can take a license
+
+
+
+
+ The pair License Identifier and License Key are incompatible, you cannot use the library
+
+
+
+
+ The library is in a trial period, you can use the library
+
+
+
+
+ The library is in an extra trial period, you can use the library
+
+
+
+
+ The trial period as expired, you no more can use the library
+
+
+
+
+ Your license does not allow you to use such a recent release. Please buy maintenance to use this version
+
+
+
+
+ Congratulations, the library is licensed.
+
+
+
+
+ Exception thrown while using the product if the license is not valid.
+
+
+
+
+ The license that causes this exception
+
+
+
+
diff --git a/.NET/Libraries/net48/UnderAutomation.Fanuc.dll b/.NET/Libraries/net48/UnderAutomation.Fanuc.dll
new file mode 100644
index 0000000..37d3cf1
Binary files /dev/null and b/.NET/Libraries/net48/UnderAutomation.Fanuc.dll differ
diff --git a/.NET/Libraries/net48/UnderAutomation.Fanuc.xml b/.NET/Libraries/net48/UnderAutomation.Fanuc.xml
new file mode 100644
index 0000000..e05933f
--- /dev/null
+++ b/.NET/Libraries/net48/UnderAutomation.Fanuc.xml
@@ -0,0 +1,5100 @@
+
+
+
+ UnderAutomation.Fanuc
+
+
+
+
+ Initialize a conenction to the robot with specified parameters
+
+
+
+
+
+ Disconnect all services connected to the robot
+
+
+
+
+ If you have a license And a key, please call this static method to register the product And exit the trial period
+ ou can register a product even if the trial period has ended
+
+ Your organization name
+ The associated key supplied by UnderAutomation
+ Information about the supplied license
+
+
+
+ Return information about your license
+
+
+
+
+ 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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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).
+
+
+
+
+ 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 FTP server. Overwritten in proxy classes.
+
+
+
+
+
+ Connect to the FTP server. Overwritten in proxy classes.
+
+
+
+
+ Called during Connect(). 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.
+
+
+
+
+ Disconnects from the server
+
+
+
+
+ Initiates a disconnection on the server
+
+ method
+ State object
+ IAsyncResult
+
+
+
+
+ Ends a call to
+
+ returned from
+
+
+
+
+ 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
+
+
+
+
+ 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?
+
+
+
+ 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.
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+ 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.
+
+
+
+ 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.
+
+
+
+ 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 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 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-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-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 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.
+
+
+
+
+ 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.
+
+
+
+
+ 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 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.
+
+
+
+ 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.
+
+
+
+
+ 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 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.
+
+
+
+ Download a file from the server and write the data into the given stream.
+ 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.
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+ 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.
+
+
+
+
+ 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 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 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 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
+
+
+
+
+ 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
+
+
+
+ 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 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
+
+
+
+
+ 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.
+
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+
+ 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 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
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+
+ 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 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.
+
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+ 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 "UnderAutomation.Fanuc.Ftp.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
+ 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.
+
+
+ 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
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+
+ 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 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
+
+
+
+ Writes data to the stream
+
+ Buffer to write to stream
+ Where in the buffer to start
+ Number of bytes to be read
+
+
+
+ Writes a line to the stream using the specified encoding
+
+ 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
+
+
+
+ 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 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
+
+
+
+
+ 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)
+
+
+
+
+ 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.
+
+
+
+
+ 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.
+
+
+
+
+ FTP Client connection to a robot
+
+
+
+
+ Instanciate a new FTP client connection
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ FTP username
+ FTP password for username
+
+
+
+ Base class for FTP features
+
+
+
+
+ Provides functions to read and decode Fanuc files
+
+
+
+
+ Connect robot IP address or host name
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ FTP username
+ FTP password for username
+
+
+
+ Indicates that FTP connection is active
+
+
+
+
+ Disconnects from FTP server
+
+
+
+
+ Delegate to track upload progress. The value provided is in the range 0 to 100
+
+ The value provided is in the range 0 to 100
+
+
+
+ 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.
+ It overwrites file if it already exists.
+
+ The full data of the file, as a stream
+ The full or relative path to the file on the server
+ Create the remote directory if it does not exist. Slows down upload due to additional checks required.
+ 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.
+ It overwrites file if it already exists.
+
+ The full data of the file, as a byte array
+ The full or relative path to the file on the server
+ Create the remote directory if it does not exist. Slows down upload due to additional checks required.
+ 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 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
+ Create the remote directory if it does not exist. Slows down upload due to additional checks required.
+ 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.
+
+
+
+ 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
+ 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.
+ 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
+ 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 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.
+ It overwrites the file if it already exists.
+
+ The full or relative path to the file on the local file system
+ 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.
+
+
+
+ Checks if a file exists on the server.
+
+ The full or relative path to the file
+ True if the file exists
+
+
+
+ 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.
+
+
+
+ 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
+
+
+
+ Deletes the specified directory and all its contents.
+
+ The full or relative path of the directory to delete
+
+
+
+ Deletes a file on the server
+
+ The full or relative path to the file
+
+
+
+ Gets a file listing from the server. Each object returned
+ contains information about the file that was able to be retrieved.
+
+ The path of the directory to list
+ An array of FtpListItem objects
+
+
+
+ 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
+ A FtpListItem object
+
+
+
+ Internal implementation of FTP Client
+
+
+
+
+ Provides functions to read and decode Fanuc FTP files
+
+
+
+
+ Provides functions to read and decode Fanuc FTP diagnostic files *.dg
+
+
+
+
+ Provides functions to read and decode Fanuc FTP variable files *.va
+
+
+
+
+ Provides functions to read and decode Fanuc FTP diagnostic files *.dg
+
+
+
+
+ Provides functions to read and decode Fanuc FTP variable files *.va
+
+
+
+
+ Represents a file system object on the server
+
+
+
+
+ Gets the size of the object.
+
+
+
+
+ Gets the file permissions in the CHMOD format.
+
+
+
+
+ Gets the created date of the object.
+
+
+
+
+ Gets the full path name to the object.
+
+
+
+
+ Gets name to the object.
+
+
+
+
+ Gets the last write time of the object.
+
+
+
+
+ Gets the type of file system object.
+
+
+
+
+ Type of file system of object
+
+
+
+
+ A file
+
+
+
+
+ A directory
+
+
+
+
+ A symbolic link
+
+
+
+
+ Base class for Telnet KCL client
+
+
+
+
+ Connect robot IP address or host name
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ Telnet password associated with KCL user
+
+
+
+ Is Telnet client connected
+
+
+
+
+ Disconnect Telnet client from robot
+
+
+
+
+ Aborts the specified running or paused task. If prog_ name is not specified, the default program Is used.
+ Execution of the current program statement Is completed before the task aborts except for the current motion, DELAY, WAIT, Or READ statements, which are canceled.
+
+ The name of any KAREL or TP program which is a task
+ Aborts all running or paused tasks
+
+
+
+ Aborts all running or paused tasks.
+ Execution of the current program statement Is completed before the task aborts except for the current motion, DELAY, WAIT, Or READ statements, which are canceled.
+
+ Aborts all running or paused tasks
+
+
+
+ Clears all KAREL and teach pendant programs and variable data from memory.
+ All cleared programs And variables (if they were saved with the SaveVars() command) can be reloaded into memory Using the Load() command.
+
+
+
+
+ Clears the program data from memory for the specified or default program.
+
+ The name of any KAREL or teach pendant program in memory
+
+
+
+ Clears the variable and type data associated with the specified or default program from memory.
+ Variables And types that are referenced by a loaded program are Not cleared.
+
+ The name of any KAREL or teach pendant program with variables
+
+
+
+ Continues program execution of the specified task (or all paused tasks if program argument is null) that has been paused by a hold, pause, or test run operation.
+ If the program Is aborted, the program execution Is started at the first executable line.
+ When a task Is paused, the CYCLE START button on the operator panel has the same effect as the Continue() command.
+ Continue is a motion command; therefore, the device from which it Is issued must have motion control.
+
+ The name of any KAREL or teach pendant program which is a task. If null, it continues all paused tasks
+
+
+
+ Pauses the specified or default program that is being executed and holds motion at the current position (after a normal deceleration).
+ Use the Continue() command Or the CYCLE START button On the Operator panel To resume program execution.
+
+ The name of any KAREL or TP program. If null, it holds all executing programs
+
+
+
+ Pauses the specified running task. If program is not specified, the default program is used.
+ Execution of the current motion segment and the current program statement is completed before the task is paused.
+ Condition handlers remain active. If the condition handler action is NOPAUSE and the condition is satisfied, task execution resumes.
+ If the statement is a WAIT FOR and the wait condition is satisfied while the task is paused, the statement following the WAIT FOR is executed immediately when the task is resumed.
+ If the statement is a DELAY, timing will continue while the task is paused.
+ If the delay time is finished while the task is paused, the statement following the DELAY is immediately executed when the task is resumed.
+ If the statement is a READ, it will accept input even though the task is paused.
+ The Continue() command resumes execution of a paused task.
+ When a task is paused, the CYCLE START button on the operator panel has the same effect as the KCL> CONTINUE command.
+
+ the name of any KAREL or TP program which is a task. If null, it pauses all running tasks.
+ Pauses the task even if the NOPAUSE attribute is set
+
+
+
+ Enables servo power after an error condition has shut off servo power, provided the cause of the error has been cleared.
+ The command also clears the message line on the CRT/KB display. The error message remains displayed if the error condition still exists.
+ The Reset() command has no effect on a program that is being executed. It has the same effect as the FAULT RESET button on the operator panel and the RESET function key on the teach pendant RESET screen.
+
+
+
+
+ Executes the specified program. The program must be loaded in memory
+ If no program is specified the default program is run. If uninitialized variables are encountered, program execution is paused.
+ Execution begins at the first executable line.
+ RUN is a motion command; therefore, the device from which it is issued must have motion control. If a RUN command is issued in a command file, it is executed as a NOWAIT command.
+ Therefore, the statement following the RUN command will be executed immediately after the RUN command is issued without waiting for the program, specified by the RUN command, to end. '''
+ The name of any KAREL or TP program.
+
+
+
+ Assigns the specified value to a specified input or output port. SET PORT can be used either physical Or simulated output ports, but only With simulated input ports.
+
+ Port type
+ Port index
+ port value. For boolean ports, true is 1 and 0 is false
+
+
+
+ Assigns the specified value to the specified variable. You can assign constant values or variable values, but the value must be of the data type that has been declared for the variable.
+ You can assign values to system variables with KCL write access, to program variables, or to standard and user-defined variables and fields. You can assign only one ARRAY element.
+ Use brackets ([]) after the variable name to specify an element.
+ Certain data types like positions and vectors might have more than one value specified. '''
+ A valid program variable
+ New value for variable or a program or system variable
+ The name of any KAREL or TP program.
+
+
+
+ Assigns the specified value to the specified variable. You can assign constant values or variable values, but the value must be of the data type that has been declared for the variable.
+ You can assign values to system variables with KCL write access, to program variables, or to standard and user-defined variables and fields. You can assign only one ARRAY element.
+ Use brackets ([]) after the variable name to specify an element.
+ Certain data types like positions and vectors might have more than one value specified. '''
+ A valid program variable
+ New value for variable or a program or system variable
+ The name of any KAREL or TP program.
+
+
+
+ Returns the position of the TCP relative to the current user frame of reference with an x, y, and z location in millimeters; w, p, and r orientation in degrees; and the current configuration string. Be sure the robot is calibrated.
+
+
+
+
+ Returns the status information of the specified or default program being executed.
+
+ The name of any KAREL or TP program in memory
+
+
+
+ Simulating I/O allows you to test a program that uses I/O. Simulating I/O does not actually send output signals or receive input signals.
+ When simulating a port value, you can specify its initial simulated value or allow the initial value to be the same as the physical port value. If no value is specified, the current physical port value is used. '''
+ I/O port type
+ I/O port index
+ New value for the port
+
+
+
+ Skips execution of the current statement in the specified task.
+ If programm is not specified, the default program is used.
+ It has no effect when a task is running or when the system is in a READY state.
+ Entire motion statements are skipped with this command. You cannot skip single motion segments.
+ The Continue() command resumes execution of the paused task with the statement following the last skipped statement. END statements cannot be skipped.
+ If you skip the last RETURN statement in a function routine, there is no way to return the value of the function to the calling program. Therefore, when executing the END statement of the routine, the task will abort.
+ If you skip into a FOR loop, you have skipped the statement that initializes the loop counter. When the ENDFOR statement is executed the program will try to remove the loop counter from the stack. If the FOR loop was nested in another FOR loop, the loop counter for the previous FOR loop will be removed from the stack, causing potentially invalid results. If the FOR loop was not nested, a stack underflow error will occur, causing the task to abort.
+ READ, MOVE, DELAY, WAIT FOR, and PULSE statements can be paused after they have begun execution. In these cases, when the task is resumed, execution of the paused statement must be finished before subsequent statements are executed. Subsequent skipped statements will not be executed.
+ In particular, READ and WAIT FOR statements often require user intervention, such as entering data, before statement execution is completed.
+ Step mode operation and step mode type have no effect on the Skip() command.
+
+ The name of any KAREL or TP program which is a task
+
+
+
+ Discontinues simulation on all input or output port. When a port is unsimulated, the physical value replaces the simulated value.
+
+
+
+
+
+ Discontinues simulation of the specified input or output port. When a port is unsimulated, the physical value replaces the simulated value.
+
+ I/O port type
+ I/O port index to unsimulate
+
+
+
+
+ Internal implementation of KCL Client
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ Telnet password associated with KCL user
+
+
+
+ Main class that represents a connection to a Fanuc Motoman industrial robot
+
+
+
+
+ Create a new instance of a robot communication
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ Telnet password associated with KCL user
+
+
+
+ Information about a license number
+
+
+
+
+ Create a new LicenseInfo instance to retrieve informations about a pair of identifier/key
+ This class should not be used to register your product. Please use static function UnderAutomation.UniversalRobot.UniversalRobotInterface.RegisterLicense to register a license.
+
+ The name of your organization (null for trial version)
+ The key, associated to the identifier, supplied by UnderAutomation (null for trial version)
+
+
+
+ Throw a InvalidLicenseException if the license is Invalid or Expired
+
+
+
+
+ The license key supplied by UnderAutomation (null for trial period)
+
+
+
+
+ Commercial name of this .NET Software library
+
+
+
+
+ Remaining days of the trial period. Null if the product is licensed. It could be negative if the trial period is ended since several days.
+
+
+
+
+ The date the trial period starts. If the product is licensed, the date of the library first use.
+
+
+
+
+ Name of your organisation
+
+
+
+
+ The date the product will expire. Null if the product is licensed.
+
+
+
+
+ The current license state
+
+
+
+
+ The date this version of the product was released.
+
+
+
+
+ Number of maintenance years included in your license
+
+
+
+
+ The date you get the license
+
+
+
+
+ The date your maintenance contract end and you no longer can use this license with newer versions.
+
+
+
+
+ A human description of the license
+
+
+
+
+ States that can take a license
+
+
+
+
+ The pair License Identifier and License Key are incompatible, you cannot use the library
+
+
+
+
+ The library is in a trial period, you can use the library
+
+
+
+
+ The library is in an extra trial period, you can use the library
+
+
+
+
+ The trial period as expired, you no more can use the library
+
+
+
+
+ Your license does not allow you to use such a recent release. Please buy maintenance to use this version
+
+
+
+
+ Congratulations, the library is licensed.
+
+
+
+
+ Exception thrown while using the product if the license is not valid.
+
+
+
+
+ The license that causes this exception
+
+
+
+
diff --git a/.NET/Libraries/net50/UnderAutomation.Fanuc.dll b/.NET/Libraries/net50/UnderAutomation.Fanuc.dll
new file mode 100644
index 0000000..02fab39
Binary files /dev/null and b/.NET/Libraries/net50/UnderAutomation.Fanuc.dll differ
diff --git a/.NET/Libraries/net50/UnderAutomation.Fanuc.xml b/.NET/Libraries/net50/UnderAutomation.Fanuc.xml
new file mode 100644
index 0000000..e05933f
--- /dev/null
+++ b/.NET/Libraries/net50/UnderAutomation.Fanuc.xml
@@ -0,0 +1,5100 @@
+
+
+
+ UnderAutomation.Fanuc
+
+
+
+
+ Initialize a conenction to the robot with specified parameters
+
+
+
+
+
+ Disconnect all services connected to the robot
+
+
+
+
+ If you have a license And a key, please call this static method to register the product And exit the trial period
+ ou can register a product even if the trial period has ended
+
+ Your organization name
+ The associated key supplied by UnderAutomation
+ Information about the supplied license
+
+
+
+ Return information about your license
+
+
+
+
+ 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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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).
+
+
+
+
+ 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 FTP server. Overwritten in proxy classes.
+
+
+
+
+
+ Connect to the FTP server. Overwritten in proxy classes.
+
+
+
+
+ Called during Connect(). 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.
+
+
+
+
+ Disconnects from the server
+
+
+
+
+ Initiates a disconnection on the server
+
+ method
+ State object
+ IAsyncResult
+
+
+
+
+ Ends a call to
+
+ returned from
+
+
+
+
+ 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
+
+
+
+
+ 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?
+
+
+
+ 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.
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+ 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.
+
+
+
+ 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.
+
+
+
+ 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 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 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-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-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 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.
+
+
+
+
+ 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.
+
+
+
+
+ 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 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.
+
+
+
+ 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.
+
+
+
+
+ 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 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.
+
+
+
+ Download a file from the server and write the data into the given stream.
+ 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.
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+ 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.
+
+
+
+
+ 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 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 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 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
+
+
+
+
+ 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
+
+
+
+ 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 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
+
+
+
+
+ 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.
+
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+
+ 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 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
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+
+ 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 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.
+
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+ 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 "UnderAutomation.Fanuc.Ftp.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
+ 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.
+
+
+ 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
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+
+ 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 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
+
+
+
+ Writes data to the stream
+
+ Buffer to write to stream
+ Where in the buffer to start
+ Number of bytes to be read
+
+
+
+ Writes a line to the stream using the specified encoding
+
+ 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
+
+
+
+ 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 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
+
+
+
+
+ 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)
+
+
+
+
+ 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.
+
+
+
+
+ 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.
+
+
+
+
+ FTP Client connection to a robot
+
+
+
+
+ Instanciate a new FTP client connection
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ FTP username
+ FTP password for username
+
+
+
+ Base class for FTP features
+
+
+
+
+ Provides functions to read and decode Fanuc files
+
+
+
+
+ Connect robot IP address or host name
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ FTP username
+ FTP password for username
+
+
+
+ Indicates that FTP connection is active
+
+
+
+
+ Disconnects from FTP server
+
+
+
+
+ Delegate to track upload progress. The value provided is in the range 0 to 100
+
+ The value provided is in the range 0 to 100
+
+
+
+ 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.
+ It overwrites file if it already exists.
+
+ The full data of the file, as a stream
+ The full or relative path to the file on the server
+ Create the remote directory if it does not exist. Slows down upload due to additional checks required.
+ 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.
+ It overwrites file if it already exists.
+
+ The full data of the file, as a byte array
+ The full or relative path to the file on the server
+ Create the remote directory if it does not exist. Slows down upload due to additional checks required.
+ 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 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
+ Create the remote directory if it does not exist. Slows down upload due to additional checks required.
+ 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.
+
+
+
+ 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
+ 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.
+ 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
+ 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 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.
+ It overwrites the file if it already exists.
+
+ The full or relative path to the file on the local file system
+ 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.
+
+
+
+ Checks if a file exists on the server.
+
+ The full or relative path to the file
+ True if the file exists
+
+
+
+ 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.
+
+
+
+ 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
+
+
+
+ Deletes the specified directory and all its contents.
+
+ The full or relative path of the directory to delete
+
+
+
+ Deletes a file on the server
+
+ The full or relative path to the file
+
+
+
+ Gets a file listing from the server. Each object returned
+ contains information about the file that was able to be retrieved.
+
+ The path of the directory to list
+ An array of FtpListItem objects
+
+
+
+ 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
+ A FtpListItem object
+
+
+
+ Internal implementation of FTP Client
+
+
+
+
+ Provides functions to read and decode Fanuc FTP files
+
+
+
+
+ Provides functions to read and decode Fanuc FTP diagnostic files *.dg
+
+
+
+
+ Provides functions to read and decode Fanuc FTP variable files *.va
+
+
+
+
+ Provides functions to read and decode Fanuc FTP diagnostic files *.dg
+
+
+
+
+ Provides functions to read and decode Fanuc FTP variable files *.va
+
+
+
+
+ Represents a file system object on the server
+
+
+
+
+ Gets the size of the object.
+
+
+
+
+ Gets the file permissions in the CHMOD format.
+
+
+
+
+ Gets the created date of the object.
+
+
+
+
+ Gets the full path name to the object.
+
+
+
+
+ Gets name to the object.
+
+
+
+
+ Gets the last write time of the object.
+
+
+
+
+ Gets the type of file system object.
+
+
+
+
+ Type of file system of object
+
+
+
+
+ A file
+
+
+
+
+ A directory
+
+
+
+
+ A symbolic link
+
+
+
+
+ Base class for Telnet KCL client
+
+
+
+
+ Connect robot IP address or host name
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ Telnet password associated with KCL user
+
+
+
+ Is Telnet client connected
+
+
+
+
+ Disconnect Telnet client from robot
+
+
+
+
+ Aborts the specified running or paused task. If prog_ name is not specified, the default program Is used.
+ Execution of the current program statement Is completed before the task aborts except for the current motion, DELAY, WAIT, Or READ statements, which are canceled.
+
+ The name of any KAREL or TP program which is a task
+ Aborts all running or paused tasks
+
+
+
+ Aborts all running or paused tasks.
+ Execution of the current program statement Is completed before the task aborts except for the current motion, DELAY, WAIT, Or READ statements, which are canceled.
+
+ Aborts all running or paused tasks
+
+
+
+ Clears all KAREL and teach pendant programs and variable data from memory.
+ All cleared programs And variables (if they were saved with the SaveVars() command) can be reloaded into memory Using the Load() command.
+
+
+
+
+ Clears the program data from memory for the specified or default program.
+
+ The name of any KAREL or teach pendant program in memory
+
+
+
+ Clears the variable and type data associated with the specified or default program from memory.
+ Variables And types that are referenced by a loaded program are Not cleared.
+
+ The name of any KAREL or teach pendant program with variables
+
+
+
+ Continues program execution of the specified task (or all paused tasks if program argument is null) that has been paused by a hold, pause, or test run operation.
+ If the program Is aborted, the program execution Is started at the first executable line.
+ When a task Is paused, the CYCLE START button on the operator panel has the same effect as the Continue() command.
+ Continue is a motion command; therefore, the device from which it Is issued must have motion control.
+
+ The name of any KAREL or teach pendant program which is a task. If null, it continues all paused tasks
+
+
+
+ Pauses the specified or default program that is being executed and holds motion at the current position (after a normal deceleration).
+ Use the Continue() command Or the CYCLE START button On the Operator panel To resume program execution.
+
+ The name of any KAREL or TP program. If null, it holds all executing programs
+
+
+
+ Pauses the specified running task. If program is not specified, the default program is used.
+ Execution of the current motion segment and the current program statement is completed before the task is paused.
+ Condition handlers remain active. If the condition handler action is NOPAUSE and the condition is satisfied, task execution resumes.
+ If the statement is a WAIT FOR and the wait condition is satisfied while the task is paused, the statement following the WAIT FOR is executed immediately when the task is resumed.
+ If the statement is a DELAY, timing will continue while the task is paused.
+ If the delay time is finished while the task is paused, the statement following the DELAY is immediately executed when the task is resumed.
+ If the statement is a READ, it will accept input even though the task is paused.
+ The Continue() command resumes execution of a paused task.
+ When a task is paused, the CYCLE START button on the operator panel has the same effect as the KCL> CONTINUE command.
+
+ the name of any KAREL or TP program which is a task. If null, it pauses all running tasks.
+ Pauses the task even if the NOPAUSE attribute is set
+
+
+
+ Enables servo power after an error condition has shut off servo power, provided the cause of the error has been cleared.
+ The command also clears the message line on the CRT/KB display. The error message remains displayed if the error condition still exists.
+ The Reset() command has no effect on a program that is being executed. It has the same effect as the FAULT RESET button on the operator panel and the RESET function key on the teach pendant RESET screen.
+
+
+
+
+ Executes the specified program. The program must be loaded in memory
+ If no program is specified the default program is run. If uninitialized variables are encountered, program execution is paused.
+ Execution begins at the first executable line.
+ RUN is a motion command; therefore, the device from which it is issued must have motion control. If a RUN command is issued in a command file, it is executed as a NOWAIT command.
+ Therefore, the statement following the RUN command will be executed immediately after the RUN command is issued without waiting for the program, specified by the RUN command, to end. '''
+ The name of any KAREL or TP program.
+
+
+
+ Assigns the specified value to a specified input or output port. SET PORT can be used either physical Or simulated output ports, but only With simulated input ports.
+
+ Port type
+ Port index
+ port value. For boolean ports, true is 1 and 0 is false
+
+
+
+ Assigns the specified value to the specified variable. You can assign constant values or variable values, but the value must be of the data type that has been declared for the variable.
+ You can assign values to system variables with KCL write access, to program variables, or to standard and user-defined variables and fields. You can assign only one ARRAY element.
+ Use brackets ([]) after the variable name to specify an element.
+ Certain data types like positions and vectors might have more than one value specified. '''
+ A valid program variable
+ New value for variable or a program or system variable
+ The name of any KAREL or TP program.
+
+
+
+ Assigns the specified value to the specified variable. You can assign constant values or variable values, but the value must be of the data type that has been declared for the variable.
+ You can assign values to system variables with KCL write access, to program variables, or to standard and user-defined variables and fields. You can assign only one ARRAY element.
+ Use brackets ([]) after the variable name to specify an element.
+ Certain data types like positions and vectors might have more than one value specified. '''
+ A valid program variable
+ New value for variable or a program or system variable
+ The name of any KAREL or TP program.
+
+
+
+ Returns the position of the TCP relative to the current user frame of reference with an x, y, and z location in millimeters; w, p, and r orientation in degrees; and the current configuration string. Be sure the robot is calibrated.
+
+
+
+
+ Returns the status information of the specified or default program being executed.
+
+ The name of any KAREL or TP program in memory
+
+
+
+ Simulating I/O allows you to test a program that uses I/O. Simulating I/O does not actually send output signals or receive input signals.
+ When simulating a port value, you can specify its initial simulated value or allow the initial value to be the same as the physical port value. If no value is specified, the current physical port value is used. '''
+ I/O port type
+ I/O port index
+ New value for the port
+
+
+
+ Skips execution of the current statement in the specified task.
+ If programm is not specified, the default program is used.
+ It has no effect when a task is running or when the system is in a READY state.
+ Entire motion statements are skipped with this command. You cannot skip single motion segments.
+ The Continue() command resumes execution of the paused task with the statement following the last skipped statement. END statements cannot be skipped.
+ If you skip the last RETURN statement in a function routine, there is no way to return the value of the function to the calling program. Therefore, when executing the END statement of the routine, the task will abort.
+ If you skip into a FOR loop, you have skipped the statement that initializes the loop counter. When the ENDFOR statement is executed the program will try to remove the loop counter from the stack. If the FOR loop was nested in another FOR loop, the loop counter for the previous FOR loop will be removed from the stack, causing potentially invalid results. If the FOR loop was not nested, a stack underflow error will occur, causing the task to abort.
+ READ, MOVE, DELAY, WAIT FOR, and PULSE statements can be paused after they have begun execution. In these cases, when the task is resumed, execution of the paused statement must be finished before subsequent statements are executed. Subsequent skipped statements will not be executed.
+ In particular, READ and WAIT FOR statements often require user intervention, such as entering data, before statement execution is completed.
+ Step mode operation and step mode type have no effect on the Skip() command.
+
+ The name of any KAREL or TP program which is a task
+
+
+
+ Discontinues simulation on all input or output port. When a port is unsimulated, the physical value replaces the simulated value.
+
+
+
+
+
+ Discontinues simulation of the specified input or output port. When a port is unsimulated, the physical value replaces the simulated value.
+
+ I/O port type
+ I/O port index to unsimulate
+
+
+
+
+ Internal implementation of KCL Client
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ Telnet password associated with KCL user
+
+
+
+ Main class that represents a connection to a Fanuc Motoman industrial robot
+
+
+
+
+ Create a new instance of a robot communication
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ Telnet password associated with KCL user
+
+
+
+ Information about a license number
+
+
+
+
+ Create a new LicenseInfo instance to retrieve informations about a pair of identifier/key
+ This class should not be used to register your product. Please use static function UnderAutomation.UniversalRobot.UniversalRobotInterface.RegisterLicense to register a license.
+
+ The name of your organization (null for trial version)
+ The key, associated to the identifier, supplied by UnderAutomation (null for trial version)
+
+
+
+ Throw a InvalidLicenseException if the license is Invalid or Expired
+
+
+
+
+ The license key supplied by UnderAutomation (null for trial period)
+
+
+
+
+ Commercial name of this .NET Software library
+
+
+
+
+ Remaining days of the trial period. Null if the product is licensed. It could be negative if the trial period is ended since several days.
+
+
+
+
+ The date the trial period starts. If the product is licensed, the date of the library first use.
+
+
+
+
+ Name of your organisation
+
+
+
+
+ The date the product will expire. Null if the product is licensed.
+
+
+
+
+ The current license state
+
+
+
+
+ The date this version of the product was released.
+
+
+
+
+ Number of maintenance years included in your license
+
+
+
+
+ The date you get the license
+
+
+
+
+ The date your maintenance contract end and you no longer can use this license with newer versions.
+
+
+
+
+ A human description of the license
+
+
+
+
+ States that can take a license
+
+
+
+
+ The pair License Identifier and License Key are incompatible, you cannot use the library
+
+
+
+
+ The library is in a trial period, you can use the library
+
+
+
+
+ The library is in an extra trial period, you can use the library
+
+
+
+
+ The trial period as expired, you no more can use the library
+
+
+
+
+ Your license does not allow you to use such a recent release. Please buy maintenance to use this version
+
+
+
+
+ Congratulations, the library is licensed.
+
+
+
+
+ Exception thrown while using the product if the license is not valid.
+
+
+
+
+ The license that causes this exception
+
+
+
+
diff --git a/.NET/Libraries/netcoreapp2.0/UnderAutomation.Fanuc.dll b/.NET/Libraries/netcoreapp2.0/UnderAutomation.Fanuc.dll
new file mode 100644
index 0000000..6fe952a
Binary files /dev/null and b/.NET/Libraries/netcoreapp2.0/UnderAutomation.Fanuc.dll differ
diff --git a/.NET/Libraries/netcoreapp2.0/UnderAutomation.Fanuc.xml b/.NET/Libraries/netcoreapp2.0/UnderAutomation.Fanuc.xml
new file mode 100644
index 0000000..e05933f
--- /dev/null
+++ b/.NET/Libraries/netcoreapp2.0/UnderAutomation.Fanuc.xml
@@ -0,0 +1,5100 @@
+
+
+
+ UnderAutomation.Fanuc
+
+
+
+
+ Initialize a conenction to the robot with specified parameters
+
+
+
+
+
+ Disconnect all services connected to the robot
+
+
+
+
+ If you have a license And a key, please call this static method to register the product And exit the trial period
+ ou can register a product even if the trial period has ended
+
+ Your organization name
+ The associated key supplied by UnderAutomation
+ Information about the supplied license
+
+
+
+ Return information about your license
+
+
+
+
+ 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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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).
+
+
+
+
+ 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 FTP server. Overwritten in proxy classes.
+
+
+
+
+
+ Connect to the FTP server. Overwritten in proxy classes.
+
+
+
+
+ Called during Connect(). 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.
+
+
+
+
+ Disconnects from the server
+
+
+
+
+ Initiates a disconnection on the server
+
+ method
+ State object
+ IAsyncResult
+
+
+
+
+ Ends a call to
+
+ returned from
+
+
+
+
+ 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
+
+
+
+
+ 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?
+
+
+
+ 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.
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+ 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.
+
+
+
+ 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.
+
+
+
+ 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 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 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-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-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 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.
+
+
+
+
+ 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.
+
+
+
+
+ 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 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.
+
+
+
+ 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.
+
+
+
+
+ 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 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.
+
+
+
+ Download a file from the server and write the data into the given stream.
+ 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.
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+ 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.
+
+
+
+
+ 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 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 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 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
+
+
+
+
+ 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
+
+
+
+ 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 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
+
+
+
+
+ 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.
+
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+
+ 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 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
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+
+ 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 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.
+
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+ 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 "UnderAutomation.Fanuc.Ftp.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
+ 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.
+
+
+ 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
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+
+ 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 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
+
+
+
+ Writes data to the stream
+
+ Buffer to write to stream
+ Where in the buffer to start
+ Number of bytes to be read
+
+
+
+ Writes a line to the stream using the specified encoding
+
+ 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
+
+
+
+ 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 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
+
+
+
+
+ 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)
+
+
+
+
+ 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.
+
+
+
+
+ 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.
+
+
+
+
+ FTP Client connection to a robot
+
+
+
+
+ Instanciate a new FTP client connection
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ FTP username
+ FTP password for username
+
+
+
+ Base class for FTP features
+
+
+
+
+ Provides functions to read and decode Fanuc files
+
+
+
+
+ Connect robot IP address or host name
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ FTP username
+ FTP password for username
+
+
+
+ Indicates that FTP connection is active
+
+
+
+
+ Disconnects from FTP server
+
+
+
+
+ Delegate to track upload progress. The value provided is in the range 0 to 100
+
+ The value provided is in the range 0 to 100
+
+
+
+ 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.
+ It overwrites file if it already exists.
+
+ The full data of the file, as a stream
+ The full or relative path to the file on the server
+ Create the remote directory if it does not exist. Slows down upload due to additional checks required.
+ 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.
+ It overwrites file if it already exists.
+
+ The full data of the file, as a byte array
+ The full or relative path to the file on the server
+ Create the remote directory if it does not exist. Slows down upload due to additional checks required.
+ 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 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
+ Create the remote directory if it does not exist. Slows down upload due to additional checks required.
+ 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.
+
+
+
+ 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
+ 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.
+ 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
+ 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 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.
+ It overwrites the file if it already exists.
+
+ The full or relative path to the file on the local file system
+ 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.
+
+
+
+ Checks if a file exists on the server.
+
+ The full or relative path to the file
+ True if the file exists
+
+
+
+ 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.
+
+
+
+ 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
+
+
+
+ Deletes the specified directory and all its contents.
+
+ The full or relative path of the directory to delete
+
+
+
+ Deletes a file on the server
+
+ The full or relative path to the file
+
+
+
+ Gets a file listing from the server. Each object returned
+ contains information about the file that was able to be retrieved.
+
+ The path of the directory to list
+ An array of FtpListItem objects
+
+
+
+ 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
+ A FtpListItem object
+
+
+
+ Internal implementation of FTP Client
+
+
+
+
+ Provides functions to read and decode Fanuc FTP files
+
+
+
+
+ Provides functions to read and decode Fanuc FTP diagnostic files *.dg
+
+
+
+
+ Provides functions to read and decode Fanuc FTP variable files *.va
+
+
+
+
+ Provides functions to read and decode Fanuc FTP diagnostic files *.dg
+
+
+
+
+ Provides functions to read and decode Fanuc FTP variable files *.va
+
+
+
+
+ Represents a file system object on the server
+
+
+
+
+ Gets the size of the object.
+
+
+
+
+ Gets the file permissions in the CHMOD format.
+
+
+
+
+ Gets the created date of the object.
+
+
+
+
+ Gets the full path name to the object.
+
+
+
+
+ Gets name to the object.
+
+
+
+
+ Gets the last write time of the object.
+
+
+
+
+ Gets the type of file system object.
+
+
+
+
+ Type of file system of object
+
+
+
+
+ A file
+
+
+
+
+ A directory
+
+
+
+
+ A symbolic link
+
+
+
+
+ Base class for Telnet KCL client
+
+
+
+
+ Connect robot IP address or host name
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ Telnet password associated with KCL user
+
+
+
+ Is Telnet client connected
+
+
+
+
+ Disconnect Telnet client from robot
+
+
+
+
+ Aborts the specified running or paused task. If prog_ name is not specified, the default program Is used.
+ Execution of the current program statement Is completed before the task aborts except for the current motion, DELAY, WAIT, Or READ statements, which are canceled.
+
+ The name of any KAREL or TP program which is a task
+ Aborts all running or paused tasks
+
+
+
+ Aborts all running or paused tasks.
+ Execution of the current program statement Is completed before the task aborts except for the current motion, DELAY, WAIT, Or READ statements, which are canceled.
+
+ Aborts all running or paused tasks
+
+
+
+ Clears all KAREL and teach pendant programs and variable data from memory.
+ All cleared programs And variables (if they were saved with the SaveVars() command) can be reloaded into memory Using the Load() command.
+
+
+
+
+ Clears the program data from memory for the specified or default program.
+
+ The name of any KAREL or teach pendant program in memory
+
+
+
+ Clears the variable and type data associated with the specified or default program from memory.
+ Variables And types that are referenced by a loaded program are Not cleared.
+
+ The name of any KAREL or teach pendant program with variables
+
+
+
+ Continues program execution of the specified task (or all paused tasks if program argument is null) that has been paused by a hold, pause, or test run operation.
+ If the program Is aborted, the program execution Is started at the first executable line.
+ When a task Is paused, the CYCLE START button on the operator panel has the same effect as the Continue() command.
+ Continue is a motion command; therefore, the device from which it Is issued must have motion control.
+
+ The name of any KAREL or teach pendant program which is a task. If null, it continues all paused tasks
+
+
+
+ Pauses the specified or default program that is being executed and holds motion at the current position (after a normal deceleration).
+ Use the Continue() command Or the CYCLE START button On the Operator panel To resume program execution.
+
+ The name of any KAREL or TP program. If null, it holds all executing programs
+
+
+
+ Pauses the specified running task. If program is not specified, the default program is used.
+ Execution of the current motion segment and the current program statement is completed before the task is paused.
+ Condition handlers remain active. If the condition handler action is NOPAUSE and the condition is satisfied, task execution resumes.
+ If the statement is a WAIT FOR and the wait condition is satisfied while the task is paused, the statement following the WAIT FOR is executed immediately when the task is resumed.
+ If the statement is a DELAY, timing will continue while the task is paused.
+ If the delay time is finished while the task is paused, the statement following the DELAY is immediately executed when the task is resumed.
+ If the statement is a READ, it will accept input even though the task is paused.
+ The Continue() command resumes execution of a paused task.
+ When a task is paused, the CYCLE START button on the operator panel has the same effect as the KCL> CONTINUE command.
+
+ the name of any KAREL or TP program which is a task. If null, it pauses all running tasks.
+ Pauses the task even if the NOPAUSE attribute is set
+
+
+
+ Enables servo power after an error condition has shut off servo power, provided the cause of the error has been cleared.
+ The command also clears the message line on the CRT/KB display. The error message remains displayed if the error condition still exists.
+ The Reset() command has no effect on a program that is being executed. It has the same effect as the FAULT RESET button on the operator panel and the RESET function key on the teach pendant RESET screen.
+
+
+
+
+ Executes the specified program. The program must be loaded in memory
+ If no program is specified the default program is run. If uninitialized variables are encountered, program execution is paused.
+ Execution begins at the first executable line.
+ RUN is a motion command; therefore, the device from which it is issued must have motion control. If a RUN command is issued in a command file, it is executed as a NOWAIT command.
+ Therefore, the statement following the RUN command will be executed immediately after the RUN command is issued without waiting for the program, specified by the RUN command, to end. '''
+ The name of any KAREL or TP program.
+
+
+
+ Assigns the specified value to a specified input or output port. SET PORT can be used either physical Or simulated output ports, but only With simulated input ports.
+
+ Port type
+ Port index
+ port value. For boolean ports, true is 1 and 0 is false
+
+
+
+ Assigns the specified value to the specified variable. You can assign constant values or variable values, but the value must be of the data type that has been declared for the variable.
+ You can assign values to system variables with KCL write access, to program variables, or to standard and user-defined variables and fields. You can assign only one ARRAY element.
+ Use brackets ([]) after the variable name to specify an element.
+ Certain data types like positions and vectors might have more than one value specified. '''
+ A valid program variable
+ New value for variable or a program or system variable
+ The name of any KAREL or TP program.
+
+
+
+ Assigns the specified value to the specified variable. You can assign constant values or variable values, but the value must be of the data type that has been declared for the variable.
+ You can assign values to system variables with KCL write access, to program variables, or to standard and user-defined variables and fields. You can assign only one ARRAY element.
+ Use brackets ([]) after the variable name to specify an element.
+ Certain data types like positions and vectors might have more than one value specified. '''
+ A valid program variable
+ New value for variable or a program or system variable
+ The name of any KAREL or TP program.
+
+
+
+ Returns the position of the TCP relative to the current user frame of reference with an x, y, and z location in millimeters; w, p, and r orientation in degrees; and the current configuration string. Be sure the robot is calibrated.
+
+
+
+
+ Returns the status information of the specified or default program being executed.
+
+ The name of any KAREL or TP program in memory
+
+
+
+ Simulating I/O allows you to test a program that uses I/O. Simulating I/O does not actually send output signals or receive input signals.
+ When simulating a port value, you can specify its initial simulated value or allow the initial value to be the same as the physical port value. If no value is specified, the current physical port value is used. '''
+ I/O port type
+ I/O port index
+ New value for the port
+
+
+
+ Skips execution of the current statement in the specified task.
+ If programm is not specified, the default program is used.
+ It has no effect when a task is running or when the system is in a READY state.
+ Entire motion statements are skipped with this command. You cannot skip single motion segments.
+ The Continue() command resumes execution of the paused task with the statement following the last skipped statement. END statements cannot be skipped.
+ If you skip the last RETURN statement in a function routine, there is no way to return the value of the function to the calling program. Therefore, when executing the END statement of the routine, the task will abort.
+ If you skip into a FOR loop, you have skipped the statement that initializes the loop counter. When the ENDFOR statement is executed the program will try to remove the loop counter from the stack. If the FOR loop was nested in another FOR loop, the loop counter for the previous FOR loop will be removed from the stack, causing potentially invalid results. If the FOR loop was not nested, a stack underflow error will occur, causing the task to abort.
+ READ, MOVE, DELAY, WAIT FOR, and PULSE statements can be paused after they have begun execution. In these cases, when the task is resumed, execution of the paused statement must be finished before subsequent statements are executed. Subsequent skipped statements will not be executed.
+ In particular, READ and WAIT FOR statements often require user intervention, such as entering data, before statement execution is completed.
+ Step mode operation and step mode type have no effect on the Skip() command.
+
+ The name of any KAREL or TP program which is a task
+
+
+
+ Discontinues simulation on all input or output port. When a port is unsimulated, the physical value replaces the simulated value.
+
+
+
+
+
+ Discontinues simulation of the specified input or output port. When a port is unsimulated, the physical value replaces the simulated value.
+
+ I/O port type
+ I/O port index to unsimulate
+
+
+
+
+ Internal implementation of KCL Client
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ Telnet password associated with KCL user
+
+
+
+ Main class that represents a connection to a Fanuc Motoman industrial robot
+
+
+
+
+ Create a new instance of a robot communication
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ Telnet password associated with KCL user
+
+
+
+ Information about a license number
+
+
+
+
+ Create a new LicenseInfo instance to retrieve informations about a pair of identifier/key
+ This class should not be used to register your product. Please use static function UnderAutomation.UniversalRobot.UniversalRobotInterface.RegisterLicense to register a license.
+
+ The name of your organization (null for trial version)
+ The key, associated to the identifier, supplied by UnderAutomation (null for trial version)
+
+
+
+ Throw a InvalidLicenseException if the license is Invalid or Expired
+
+
+
+
+ The license key supplied by UnderAutomation (null for trial period)
+
+
+
+
+ Commercial name of this .NET Software library
+
+
+
+
+ Remaining days of the trial period. Null if the product is licensed. It could be negative if the trial period is ended since several days.
+
+
+
+
+ The date the trial period starts. If the product is licensed, the date of the library first use.
+
+
+
+
+ Name of your organisation
+
+
+
+
+ The date the product will expire. Null if the product is licensed.
+
+
+
+
+ The current license state
+
+
+
+
+ The date this version of the product was released.
+
+
+
+
+ Number of maintenance years included in your license
+
+
+
+
+ The date you get the license
+
+
+
+
+ The date your maintenance contract end and you no longer can use this license with newer versions.
+
+
+
+
+ A human description of the license
+
+
+
+
+ States that can take a license
+
+
+
+
+ The pair License Identifier and License Key are incompatible, you cannot use the library
+
+
+
+
+ The library is in a trial period, you can use the library
+
+
+
+
+ The library is in an extra trial period, you can use the library
+
+
+
+
+ The trial period as expired, you no more can use the library
+
+
+
+
+ Your license does not allow you to use such a recent release. Please buy maintenance to use this version
+
+
+
+
+ Congratulations, the library is licensed.
+
+
+
+
+ Exception thrown while using the product if the license is not valid.
+
+
+
+
+ The license that causes this exception
+
+
+
+
diff --git a/.NET/Libraries/netcoreapp2.1/UnderAutomation.Fanuc.dll b/.NET/Libraries/netcoreapp2.1/UnderAutomation.Fanuc.dll
new file mode 100644
index 0000000..45a1cd1
Binary files /dev/null and b/.NET/Libraries/netcoreapp2.1/UnderAutomation.Fanuc.dll differ
diff --git a/.NET/Libraries/netcoreapp2.1/UnderAutomation.Fanuc.xml b/.NET/Libraries/netcoreapp2.1/UnderAutomation.Fanuc.xml
new file mode 100644
index 0000000..e05933f
--- /dev/null
+++ b/.NET/Libraries/netcoreapp2.1/UnderAutomation.Fanuc.xml
@@ -0,0 +1,5100 @@
+
+
+
+ UnderAutomation.Fanuc
+
+
+
+
+ Initialize a conenction to the robot with specified parameters
+
+
+
+
+
+ Disconnect all services connected to the robot
+
+
+
+
+ If you have a license And a key, please call this static method to register the product And exit the trial period
+ ou can register a product even if the trial period has ended
+
+ Your organization name
+ The associated key supplied by UnderAutomation
+ Information about the supplied license
+
+
+
+ Return information about your license
+
+
+
+
+ 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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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).
+
+
+
+
+ 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 FTP server. Overwritten in proxy classes.
+
+
+
+
+
+ Connect to the FTP server. Overwritten in proxy classes.
+
+
+
+
+ Called during Connect(). 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.
+
+
+
+
+ Disconnects from the server
+
+
+
+
+ Initiates a disconnection on the server
+
+ method
+ State object
+ IAsyncResult
+
+
+
+
+ Ends a call to
+
+ returned from
+
+
+
+
+ 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
+
+
+
+
+ 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?
+
+
+
+ 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.
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+ 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.
+
+
+
+ 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.
+
+
+
+ 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 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 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-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-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 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.
+
+
+
+
+ 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.
+
+
+
+
+ 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 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.
+
+
+
+ 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.
+
+
+
+
+ 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 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.
+
+
+
+ Download a file from the server and write the data into the given stream.
+ 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.
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+ 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.
+
+
+
+
+ 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 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 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 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
+
+
+
+
+ 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
+
+
+
+ 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 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
+
+
+
+
+ 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.
+
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+
+ 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 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
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+
+ 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 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.
+
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+ 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 "UnderAutomation.Fanuc.Ftp.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
+ 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.
+
+
+ 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
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+
+ 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 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
+
+
+
+ Writes data to the stream
+
+ Buffer to write to stream
+ Where in the buffer to start
+ Number of bytes to be read
+
+
+
+ Writes a line to the stream using the specified encoding
+
+ 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
+
+
+
+ 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 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
+
+
+
+
+ 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)
+
+
+
+
+ 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.
+
+
+
+
+ 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.
+
+
+
+
+ FTP Client connection to a robot
+
+
+
+
+ Instanciate a new FTP client connection
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ FTP username
+ FTP password for username
+
+
+
+ Base class for FTP features
+
+
+
+
+ Provides functions to read and decode Fanuc files
+
+
+
+
+ Connect robot IP address or host name
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ FTP username
+ FTP password for username
+
+
+
+ Indicates that FTP connection is active
+
+
+
+
+ Disconnects from FTP server
+
+
+
+
+ Delegate to track upload progress. The value provided is in the range 0 to 100
+
+ The value provided is in the range 0 to 100
+
+
+
+ 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.
+ It overwrites file if it already exists.
+
+ The full data of the file, as a stream
+ The full or relative path to the file on the server
+ Create the remote directory if it does not exist. Slows down upload due to additional checks required.
+ 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.
+ It overwrites file if it already exists.
+
+ The full data of the file, as a byte array
+ The full or relative path to the file on the server
+ Create the remote directory if it does not exist. Slows down upload due to additional checks required.
+ 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 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
+ Create the remote directory if it does not exist. Slows down upload due to additional checks required.
+ 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.
+
+
+
+ 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
+ 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.
+ 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
+ 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 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.
+ It overwrites the file if it already exists.
+
+ The full or relative path to the file on the local file system
+ 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.
+
+
+
+ Checks if a file exists on the server.
+
+ The full or relative path to the file
+ True if the file exists
+
+
+
+ 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.
+
+
+
+ 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
+
+
+
+ Deletes the specified directory and all its contents.
+
+ The full or relative path of the directory to delete
+
+
+
+ Deletes a file on the server
+
+ The full or relative path to the file
+
+
+
+ Gets a file listing from the server. Each object returned
+ contains information about the file that was able to be retrieved.
+
+ The path of the directory to list
+ An array of FtpListItem objects
+
+
+
+ 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
+ A FtpListItem object
+
+
+
+ Internal implementation of FTP Client
+
+
+
+
+ Provides functions to read and decode Fanuc FTP files
+
+
+
+
+ Provides functions to read and decode Fanuc FTP diagnostic files *.dg
+
+
+
+
+ Provides functions to read and decode Fanuc FTP variable files *.va
+
+
+
+
+ Provides functions to read and decode Fanuc FTP diagnostic files *.dg
+
+
+
+
+ Provides functions to read and decode Fanuc FTP variable files *.va
+
+
+
+
+ Represents a file system object on the server
+
+
+
+
+ Gets the size of the object.
+
+
+
+
+ Gets the file permissions in the CHMOD format.
+
+
+
+
+ Gets the created date of the object.
+
+
+
+
+ Gets the full path name to the object.
+
+
+
+
+ Gets name to the object.
+
+
+
+
+ Gets the last write time of the object.
+
+
+
+
+ Gets the type of file system object.
+
+
+
+
+ Type of file system of object
+
+
+
+
+ A file
+
+
+
+
+ A directory
+
+
+
+
+ A symbolic link
+
+
+
+
+ Base class for Telnet KCL client
+
+
+
+
+ Connect robot IP address or host name
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ Telnet password associated with KCL user
+
+
+
+ Is Telnet client connected
+
+
+
+
+ Disconnect Telnet client from robot
+
+
+
+
+ Aborts the specified running or paused task. If prog_ name is not specified, the default program Is used.
+ Execution of the current program statement Is completed before the task aborts except for the current motion, DELAY, WAIT, Or READ statements, which are canceled.
+
+ The name of any KAREL or TP program which is a task
+ Aborts all running or paused tasks
+
+
+
+ Aborts all running or paused tasks.
+ Execution of the current program statement Is completed before the task aborts except for the current motion, DELAY, WAIT, Or READ statements, which are canceled.
+
+ Aborts all running or paused tasks
+
+
+
+ Clears all KAREL and teach pendant programs and variable data from memory.
+ All cleared programs And variables (if they were saved with the SaveVars() command) can be reloaded into memory Using the Load() command.
+
+
+
+
+ Clears the program data from memory for the specified or default program.
+
+ The name of any KAREL or teach pendant program in memory
+
+
+
+ Clears the variable and type data associated with the specified or default program from memory.
+ Variables And types that are referenced by a loaded program are Not cleared.
+
+ The name of any KAREL or teach pendant program with variables
+
+
+
+ Continues program execution of the specified task (or all paused tasks if program argument is null) that has been paused by a hold, pause, or test run operation.
+ If the program Is aborted, the program execution Is started at the first executable line.
+ When a task Is paused, the CYCLE START button on the operator panel has the same effect as the Continue() command.
+ Continue is a motion command; therefore, the device from which it Is issued must have motion control.
+
+ The name of any KAREL or teach pendant program which is a task. If null, it continues all paused tasks
+
+
+
+ Pauses the specified or default program that is being executed and holds motion at the current position (after a normal deceleration).
+ Use the Continue() command Or the CYCLE START button On the Operator panel To resume program execution.
+
+ The name of any KAREL or TP program. If null, it holds all executing programs
+
+
+
+ Pauses the specified running task. If program is not specified, the default program is used.
+ Execution of the current motion segment and the current program statement is completed before the task is paused.
+ Condition handlers remain active. If the condition handler action is NOPAUSE and the condition is satisfied, task execution resumes.
+ If the statement is a WAIT FOR and the wait condition is satisfied while the task is paused, the statement following the WAIT FOR is executed immediately when the task is resumed.
+ If the statement is a DELAY, timing will continue while the task is paused.
+ If the delay time is finished while the task is paused, the statement following the DELAY is immediately executed when the task is resumed.
+ If the statement is a READ, it will accept input even though the task is paused.
+ The Continue() command resumes execution of a paused task.
+ When a task is paused, the CYCLE START button on the operator panel has the same effect as the KCL> CONTINUE command.
+
+ the name of any KAREL or TP program which is a task. If null, it pauses all running tasks.
+ Pauses the task even if the NOPAUSE attribute is set
+
+
+
+ Enables servo power after an error condition has shut off servo power, provided the cause of the error has been cleared.
+ The command also clears the message line on the CRT/KB display. The error message remains displayed if the error condition still exists.
+ The Reset() command has no effect on a program that is being executed. It has the same effect as the FAULT RESET button on the operator panel and the RESET function key on the teach pendant RESET screen.
+
+
+
+
+ Executes the specified program. The program must be loaded in memory
+ If no program is specified the default program is run. If uninitialized variables are encountered, program execution is paused.
+ Execution begins at the first executable line.
+ RUN is a motion command; therefore, the device from which it is issued must have motion control. If a RUN command is issued in a command file, it is executed as a NOWAIT command.
+ Therefore, the statement following the RUN command will be executed immediately after the RUN command is issued without waiting for the program, specified by the RUN command, to end. '''
+ The name of any KAREL or TP program.
+
+
+
+ Assigns the specified value to a specified input or output port. SET PORT can be used either physical Or simulated output ports, but only With simulated input ports.
+
+ Port type
+ Port index
+ port value. For boolean ports, true is 1 and 0 is false
+
+
+
+ Assigns the specified value to the specified variable. You can assign constant values or variable values, but the value must be of the data type that has been declared for the variable.
+ You can assign values to system variables with KCL write access, to program variables, or to standard and user-defined variables and fields. You can assign only one ARRAY element.
+ Use brackets ([]) after the variable name to specify an element.
+ Certain data types like positions and vectors might have more than one value specified. '''
+ A valid program variable
+ New value for variable or a program or system variable
+ The name of any KAREL or TP program.
+
+
+
+ Assigns the specified value to the specified variable. You can assign constant values or variable values, but the value must be of the data type that has been declared for the variable.
+ You can assign values to system variables with KCL write access, to program variables, or to standard and user-defined variables and fields. You can assign only one ARRAY element.
+ Use brackets ([]) after the variable name to specify an element.
+ Certain data types like positions and vectors might have more than one value specified. '''
+ A valid program variable
+ New value for variable or a program or system variable
+ The name of any KAREL or TP program.
+
+
+
+ Returns the position of the TCP relative to the current user frame of reference with an x, y, and z location in millimeters; w, p, and r orientation in degrees; and the current configuration string. Be sure the robot is calibrated.
+
+
+
+
+ Returns the status information of the specified or default program being executed.
+
+ The name of any KAREL or TP program in memory
+
+
+
+ Simulating I/O allows you to test a program that uses I/O. Simulating I/O does not actually send output signals or receive input signals.
+ When simulating a port value, you can specify its initial simulated value or allow the initial value to be the same as the physical port value. If no value is specified, the current physical port value is used. '''
+ I/O port type
+ I/O port index
+ New value for the port
+
+
+
+ Skips execution of the current statement in the specified task.
+ If programm is not specified, the default program is used.
+ It has no effect when a task is running or when the system is in a READY state.
+ Entire motion statements are skipped with this command. You cannot skip single motion segments.
+ The Continue() command resumes execution of the paused task with the statement following the last skipped statement. END statements cannot be skipped.
+ If you skip the last RETURN statement in a function routine, there is no way to return the value of the function to the calling program. Therefore, when executing the END statement of the routine, the task will abort.
+ If you skip into a FOR loop, you have skipped the statement that initializes the loop counter. When the ENDFOR statement is executed the program will try to remove the loop counter from the stack. If the FOR loop was nested in another FOR loop, the loop counter for the previous FOR loop will be removed from the stack, causing potentially invalid results. If the FOR loop was not nested, a stack underflow error will occur, causing the task to abort.
+ READ, MOVE, DELAY, WAIT FOR, and PULSE statements can be paused after they have begun execution. In these cases, when the task is resumed, execution of the paused statement must be finished before subsequent statements are executed. Subsequent skipped statements will not be executed.
+ In particular, READ and WAIT FOR statements often require user intervention, such as entering data, before statement execution is completed.
+ Step mode operation and step mode type have no effect on the Skip() command.
+
+ The name of any KAREL or TP program which is a task
+
+
+
+ Discontinues simulation on all input or output port. When a port is unsimulated, the physical value replaces the simulated value.
+
+
+
+
+
+ Discontinues simulation of the specified input or output port. When a port is unsimulated, the physical value replaces the simulated value.
+
+ I/O port type
+ I/O port index to unsimulate
+
+
+
+
+ Internal implementation of KCL Client
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ Telnet password associated with KCL user
+
+
+
+ Main class that represents a connection to a Fanuc Motoman industrial robot
+
+
+
+
+ Create a new instance of a robot communication
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ Telnet password associated with KCL user
+
+
+
+ Information about a license number
+
+
+
+
+ Create a new LicenseInfo instance to retrieve informations about a pair of identifier/key
+ This class should not be used to register your product. Please use static function UnderAutomation.UniversalRobot.UniversalRobotInterface.RegisterLicense to register a license.
+
+ The name of your organization (null for trial version)
+ The key, associated to the identifier, supplied by UnderAutomation (null for trial version)
+
+
+
+ Throw a InvalidLicenseException if the license is Invalid or Expired
+
+
+
+
+ The license key supplied by UnderAutomation (null for trial period)
+
+
+
+
+ Commercial name of this .NET Software library
+
+
+
+
+ Remaining days of the trial period. Null if the product is licensed. It could be negative if the trial period is ended since several days.
+
+
+
+
+ The date the trial period starts. If the product is licensed, the date of the library first use.
+
+
+
+
+ Name of your organisation
+
+
+
+
+ The date the product will expire. Null if the product is licensed.
+
+
+
+
+ The current license state
+
+
+
+
+ The date this version of the product was released.
+
+
+
+
+ Number of maintenance years included in your license
+
+
+
+
+ The date you get the license
+
+
+
+
+ The date your maintenance contract end and you no longer can use this license with newer versions.
+
+
+
+
+ A human description of the license
+
+
+
+
+ States that can take a license
+
+
+
+
+ The pair License Identifier and License Key are incompatible, you cannot use the library
+
+
+
+
+ The library is in a trial period, you can use the library
+
+
+
+
+ The library is in an extra trial period, you can use the library
+
+
+
+
+ The trial period as expired, you no more can use the library
+
+
+
+
+ Your license does not allow you to use such a recent release. Please buy maintenance to use this version
+
+
+
+
+ Congratulations, the library is licensed.
+
+
+
+
+ Exception thrown while using the product if the license is not valid.
+
+
+
+
+ The license that causes this exception
+
+
+
+
diff --git a/.NET/Libraries/netcoreapp2.2/UnderAutomation.Fanuc.dll b/.NET/Libraries/netcoreapp2.2/UnderAutomation.Fanuc.dll
new file mode 100644
index 0000000..11d0d85
Binary files /dev/null and b/.NET/Libraries/netcoreapp2.2/UnderAutomation.Fanuc.dll differ
diff --git a/.NET/Libraries/netcoreapp2.2/UnderAutomation.Fanuc.xml b/.NET/Libraries/netcoreapp2.2/UnderAutomation.Fanuc.xml
new file mode 100644
index 0000000..e05933f
--- /dev/null
+++ b/.NET/Libraries/netcoreapp2.2/UnderAutomation.Fanuc.xml
@@ -0,0 +1,5100 @@
+
+
+
+ UnderAutomation.Fanuc
+
+
+
+
+ Initialize a conenction to the robot with specified parameters
+
+
+
+
+
+ Disconnect all services connected to the robot
+
+
+
+
+ If you have a license And a key, please call this static method to register the product And exit the trial period
+ ou can register a product even if the trial period has ended
+
+ Your organization name
+ The associated key supplied by UnderAutomation
+ Information about the supplied license
+
+
+
+ Return information about your license
+
+
+
+
+ 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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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).
+
+
+
+
+ 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 FTP server. Overwritten in proxy classes.
+
+
+
+
+
+ Connect to the FTP server. Overwritten in proxy classes.
+
+
+
+
+ Called during Connect(). 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.
+
+
+
+
+ Disconnects from the server
+
+
+
+
+ Initiates a disconnection on the server
+
+ method
+ State object
+ IAsyncResult
+
+
+
+
+ Ends a call to
+
+ returned from
+
+
+
+
+ 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
+
+
+
+
+ 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?
+
+
+
+ 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.
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+ 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.
+
+
+
+ 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.
+
+
+
+ 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 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 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-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-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 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.
+
+
+
+
+ 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.
+
+
+
+
+ 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 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.
+
+
+
+ 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.
+
+
+
+
+ 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 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.
+
+
+
+ Download a file from the server and write the data into the given stream.
+ 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.
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+ 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.
+
+
+
+
+ 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 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 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 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
+
+
+
+
+ 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
+
+
+
+ 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 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
+
+
+
+
+ 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.
+
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+
+ 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 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
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+
+ 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 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.
+
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+ 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 "UnderAutomation.Fanuc.Ftp.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
+ 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.
+
+
+ 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
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+
+ 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 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
+
+
+
+ Writes data to the stream
+
+ Buffer to write to stream
+ Where in the buffer to start
+ Number of bytes to be read
+
+
+
+ Writes a line to the stream using the specified encoding
+
+ 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
+
+
+
+ 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 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
+
+
+
+
+ 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)
+
+
+
+
+ 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.
+
+
+
+
+ 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.
+
+
+
+
+ FTP Client connection to a robot
+
+
+
+
+ Instanciate a new FTP client connection
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ FTP username
+ FTP password for username
+
+
+
+ Base class for FTP features
+
+
+
+
+ Provides functions to read and decode Fanuc files
+
+
+
+
+ Connect robot IP address or host name
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ FTP username
+ FTP password for username
+
+
+
+ Indicates that FTP connection is active
+
+
+
+
+ Disconnects from FTP server
+
+
+
+
+ Delegate to track upload progress. The value provided is in the range 0 to 100
+
+ The value provided is in the range 0 to 100
+
+
+
+ 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.
+ It overwrites file if it already exists.
+
+ The full data of the file, as a stream
+ The full or relative path to the file on the server
+ Create the remote directory if it does not exist. Slows down upload due to additional checks required.
+ 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.
+ It overwrites file if it already exists.
+
+ The full data of the file, as a byte array
+ The full or relative path to the file on the server
+ Create the remote directory if it does not exist. Slows down upload due to additional checks required.
+ 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 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
+ Create the remote directory if it does not exist. Slows down upload due to additional checks required.
+ 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.
+
+
+
+ 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
+ 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.
+ 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
+ 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 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.
+ It overwrites the file if it already exists.
+
+ The full or relative path to the file on the local file system
+ 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.
+
+
+
+ Checks if a file exists on the server.
+
+ The full or relative path to the file
+ True if the file exists
+
+
+
+ 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.
+
+
+
+ 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
+
+
+
+ Deletes the specified directory and all its contents.
+
+ The full or relative path of the directory to delete
+
+
+
+ Deletes a file on the server
+
+ The full or relative path to the file
+
+
+
+ Gets a file listing from the server. Each object returned
+ contains information about the file that was able to be retrieved.
+
+ The path of the directory to list
+ An array of FtpListItem objects
+
+
+
+ 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
+ A FtpListItem object
+
+
+
+ Internal implementation of FTP Client
+
+
+
+
+ Provides functions to read and decode Fanuc FTP files
+
+
+
+
+ Provides functions to read and decode Fanuc FTP diagnostic files *.dg
+
+
+
+
+ Provides functions to read and decode Fanuc FTP variable files *.va
+
+
+
+
+ Provides functions to read and decode Fanuc FTP diagnostic files *.dg
+
+
+
+
+ Provides functions to read and decode Fanuc FTP variable files *.va
+
+
+
+
+ Represents a file system object on the server
+
+
+
+
+ Gets the size of the object.
+
+
+
+
+ Gets the file permissions in the CHMOD format.
+
+
+
+
+ Gets the created date of the object.
+
+
+
+
+ Gets the full path name to the object.
+
+
+
+
+ Gets name to the object.
+
+
+
+
+ Gets the last write time of the object.
+
+
+
+
+ Gets the type of file system object.
+
+
+
+
+ Type of file system of object
+
+
+
+
+ A file
+
+
+
+
+ A directory
+
+
+
+
+ A symbolic link
+
+
+
+
+ Base class for Telnet KCL client
+
+
+
+
+ Connect robot IP address or host name
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ Telnet password associated with KCL user
+
+
+
+ Is Telnet client connected
+
+
+
+
+ Disconnect Telnet client from robot
+
+
+
+
+ Aborts the specified running or paused task. If prog_ name is not specified, the default program Is used.
+ Execution of the current program statement Is completed before the task aborts except for the current motion, DELAY, WAIT, Or READ statements, which are canceled.
+
+ The name of any KAREL or TP program which is a task
+ Aborts all running or paused tasks
+
+
+
+ Aborts all running or paused tasks.
+ Execution of the current program statement Is completed before the task aborts except for the current motion, DELAY, WAIT, Or READ statements, which are canceled.
+
+ Aborts all running or paused tasks
+
+
+
+ Clears all KAREL and teach pendant programs and variable data from memory.
+ All cleared programs And variables (if they were saved with the SaveVars() command) can be reloaded into memory Using the Load() command.
+
+
+
+
+ Clears the program data from memory for the specified or default program.
+
+ The name of any KAREL or teach pendant program in memory
+
+
+
+ Clears the variable and type data associated with the specified or default program from memory.
+ Variables And types that are referenced by a loaded program are Not cleared.
+
+ The name of any KAREL or teach pendant program with variables
+
+
+
+ Continues program execution of the specified task (or all paused tasks if program argument is null) that has been paused by a hold, pause, or test run operation.
+ If the program Is aborted, the program execution Is started at the first executable line.
+ When a task Is paused, the CYCLE START button on the operator panel has the same effect as the Continue() command.
+ Continue is a motion command; therefore, the device from which it Is issued must have motion control.
+
+ The name of any KAREL or teach pendant program which is a task. If null, it continues all paused tasks
+
+
+
+ Pauses the specified or default program that is being executed and holds motion at the current position (after a normal deceleration).
+ Use the Continue() command Or the CYCLE START button On the Operator panel To resume program execution.
+
+ The name of any KAREL or TP program. If null, it holds all executing programs
+
+
+
+ Pauses the specified running task. If program is not specified, the default program is used.
+ Execution of the current motion segment and the current program statement is completed before the task is paused.
+ Condition handlers remain active. If the condition handler action is NOPAUSE and the condition is satisfied, task execution resumes.
+ If the statement is a WAIT FOR and the wait condition is satisfied while the task is paused, the statement following the WAIT FOR is executed immediately when the task is resumed.
+ If the statement is a DELAY, timing will continue while the task is paused.
+ If the delay time is finished while the task is paused, the statement following the DELAY is immediately executed when the task is resumed.
+ If the statement is a READ, it will accept input even though the task is paused.
+ The Continue() command resumes execution of a paused task.
+ When a task is paused, the CYCLE START button on the operator panel has the same effect as the KCL> CONTINUE command.
+
+ the name of any KAREL or TP program which is a task. If null, it pauses all running tasks.
+ Pauses the task even if the NOPAUSE attribute is set
+
+
+
+ Enables servo power after an error condition has shut off servo power, provided the cause of the error has been cleared.
+ The command also clears the message line on the CRT/KB display. The error message remains displayed if the error condition still exists.
+ The Reset() command has no effect on a program that is being executed. It has the same effect as the FAULT RESET button on the operator panel and the RESET function key on the teach pendant RESET screen.
+
+
+
+
+ Executes the specified program. The program must be loaded in memory
+ If no program is specified the default program is run. If uninitialized variables are encountered, program execution is paused.
+ Execution begins at the first executable line.
+ RUN is a motion command; therefore, the device from which it is issued must have motion control. If a RUN command is issued in a command file, it is executed as a NOWAIT command.
+ Therefore, the statement following the RUN command will be executed immediately after the RUN command is issued without waiting for the program, specified by the RUN command, to end. '''
+ The name of any KAREL or TP program.
+
+
+
+ Assigns the specified value to a specified input or output port. SET PORT can be used either physical Or simulated output ports, but only With simulated input ports.
+
+ Port type
+ Port index
+ port value. For boolean ports, true is 1 and 0 is false
+
+
+
+ Assigns the specified value to the specified variable. You can assign constant values or variable values, but the value must be of the data type that has been declared for the variable.
+ You can assign values to system variables with KCL write access, to program variables, or to standard and user-defined variables and fields. You can assign only one ARRAY element.
+ Use brackets ([]) after the variable name to specify an element.
+ Certain data types like positions and vectors might have more than one value specified. '''
+ A valid program variable
+ New value for variable or a program or system variable
+ The name of any KAREL or TP program.
+
+
+
+ Assigns the specified value to the specified variable. You can assign constant values or variable values, but the value must be of the data type that has been declared for the variable.
+ You can assign values to system variables with KCL write access, to program variables, or to standard and user-defined variables and fields. You can assign only one ARRAY element.
+ Use brackets ([]) after the variable name to specify an element.
+ Certain data types like positions and vectors might have more than one value specified. '''
+ A valid program variable
+ New value for variable or a program or system variable
+ The name of any KAREL or TP program.
+
+
+
+ Returns the position of the TCP relative to the current user frame of reference with an x, y, and z location in millimeters; w, p, and r orientation in degrees; and the current configuration string. Be sure the robot is calibrated.
+
+
+
+
+ Returns the status information of the specified or default program being executed.
+
+ The name of any KAREL or TP program in memory
+
+
+
+ Simulating I/O allows you to test a program that uses I/O. Simulating I/O does not actually send output signals or receive input signals.
+ When simulating a port value, you can specify its initial simulated value or allow the initial value to be the same as the physical port value. If no value is specified, the current physical port value is used. '''
+ I/O port type
+ I/O port index
+ New value for the port
+
+
+
+ Skips execution of the current statement in the specified task.
+ If programm is not specified, the default program is used.
+ It has no effect when a task is running or when the system is in a READY state.
+ Entire motion statements are skipped with this command. You cannot skip single motion segments.
+ The Continue() command resumes execution of the paused task with the statement following the last skipped statement. END statements cannot be skipped.
+ If you skip the last RETURN statement in a function routine, there is no way to return the value of the function to the calling program. Therefore, when executing the END statement of the routine, the task will abort.
+ If you skip into a FOR loop, you have skipped the statement that initializes the loop counter. When the ENDFOR statement is executed the program will try to remove the loop counter from the stack. If the FOR loop was nested in another FOR loop, the loop counter for the previous FOR loop will be removed from the stack, causing potentially invalid results. If the FOR loop was not nested, a stack underflow error will occur, causing the task to abort.
+ READ, MOVE, DELAY, WAIT FOR, and PULSE statements can be paused after they have begun execution. In these cases, when the task is resumed, execution of the paused statement must be finished before subsequent statements are executed. Subsequent skipped statements will not be executed.
+ In particular, READ and WAIT FOR statements often require user intervention, such as entering data, before statement execution is completed.
+ Step mode operation and step mode type have no effect on the Skip() command.
+
+ The name of any KAREL or TP program which is a task
+
+
+
+ Discontinues simulation on all input or output port. When a port is unsimulated, the physical value replaces the simulated value.
+
+
+
+
+
+ Discontinues simulation of the specified input or output port. When a port is unsimulated, the physical value replaces the simulated value.
+
+ I/O port type
+ I/O port index to unsimulate
+
+
+
+
+ Internal implementation of KCL Client
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ Telnet password associated with KCL user
+
+
+
+ Main class that represents a connection to a Fanuc Motoman industrial robot
+
+
+
+
+ Create a new instance of a robot communication
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ Telnet password associated with KCL user
+
+
+
+ Information about a license number
+
+
+
+
+ Create a new LicenseInfo instance to retrieve informations about a pair of identifier/key
+ This class should not be used to register your product. Please use static function UnderAutomation.UniversalRobot.UniversalRobotInterface.RegisterLicense to register a license.
+
+ The name of your organization (null for trial version)
+ The key, associated to the identifier, supplied by UnderAutomation (null for trial version)
+
+
+
+ Throw a InvalidLicenseException if the license is Invalid or Expired
+
+
+
+
+ The license key supplied by UnderAutomation (null for trial period)
+
+
+
+
+ Commercial name of this .NET Software library
+
+
+
+
+ Remaining days of the trial period. Null if the product is licensed. It could be negative if the trial period is ended since several days.
+
+
+
+
+ The date the trial period starts. If the product is licensed, the date of the library first use.
+
+
+
+
+ Name of your organisation
+
+
+
+
+ The date the product will expire. Null if the product is licensed.
+
+
+
+
+ The current license state
+
+
+
+
+ The date this version of the product was released.
+
+
+
+
+ Number of maintenance years included in your license
+
+
+
+
+ The date you get the license
+
+
+
+
+ The date your maintenance contract end and you no longer can use this license with newer versions.
+
+
+
+
+ A human description of the license
+
+
+
+
+ States that can take a license
+
+
+
+
+ The pair License Identifier and License Key are incompatible, you cannot use the library
+
+
+
+
+ The library is in a trial period, you can use the library
+
+
+
+
+ The library is in an extra trial period, you can use the library
+
+
+
+
+ The trial period as expired, you no more can use the library
+
+
+
+
+ Your license does not allow you to use such a recent release. Please buy maintenance to use this version
+
+
+
+
+ Congratulations, the library is licensed.
+
+
+
+
+ Exception thrown while using the product if the license is not valid.
+
+
+
+
+ The license that causes this exception
+
+
+
+
diff --git a/.NET/Libraries/netcoreapp3.0/UnderAutomation.Fanuc.dll b/.NET/Libraries/netcoreapp3.0/UnderAutomation.Fanuc.dll
new file mode 100644
index 0000000..a75de4e
Binary files /dev/null and b/.NET/Libraries/netcoreapp3.0/UnderAutomation.Fanuc.dll differ
diff --git a/.NET/Libraries/netcoreapp3.0/UnderAutomation.Fanuc.xml b/.NET/Libraries/netcoreapp3.0/UnderAutomation.Fanuc.xml
new file mode 100644
index 0000000..e05933f
--- /dev/null
+++ b/.NET/Libraries/netcoreapp3.0/UnderAutomation.Fanuc.xml
@@ -0,0 +1,5100 @@
+
+
+
+ UnderAutomation.Fanuc
+
+
+
+
+ Initialize a conenction to the robot with specified parameters
+
+
+
+
+
+ Disconnect all services connected to the robot
+
+
+
+
+ If you have a license And a key, please call this static method to register the product And exit the trial period
+ ou can register a product even if the trial period has ended
+
+ Your organization name
+ The associated key supplied by UnderAutomation
+ Information about the supplied license
+
+
+
+ Return information about your license
+
+
+
+
+ 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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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).
+
+
+
+
+ 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 FTP server. Overwritten in proxy classes.
+
+
+
+
+
+ Connect to the FTP server. Overwritten in proxy classes.
+
+
+
+
+ Called during Connect(). 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.
+
+
+
+
+ Disconnects from the server
+
+
+
+
+ Initiates a disconnection on the server
+
+ method
+ State object
+ IAsyncResult
+
+
+
+
+ Ends a call to
+
+ returned from
+
+
+
+
+ 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
+
+
+
+
+ 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?
+
+
+
+ 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.
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+ 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.
+
+
+
+ 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.
+
+
+
+ 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 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 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-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-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 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.
+
+
+
+
+ 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.
+
+
+
+
+ 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 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.
+
+
+
+ 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.
+
+
+
+
+ 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 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.
+
+
+
+ Download a file from the server and write the data into the given stream.
+ 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.
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+ 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.
+
+
+
+
+ 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 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 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 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
+
+
+
+
+ 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
+
+
+
+ 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 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
+
+
+
+
+ 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.
+
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+
+ 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 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
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+
+ 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 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.
+
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+ 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 "UnderAutomation.Fanuc.Ftp.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
+ 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.
+
+
+ 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
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+
+ 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 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
+
+
+
+ Writes data to the stream
+
+ Buffer to write to stream
+ Where in the buffer to start
+ Number of bytes to be read
+
+
+
+ Writes a line to the stream using the specified encoding
+
+ 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
+
+
+
+ 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 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
+
+
+
+
+ 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)
+
+
+
+
+ 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.
+
+
+
+
+ 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.
+
+
+
+
+ FTP Client connection to a robot
+
+
+
+
+ Instanciate a new FTP client connection
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ FTP username
+ FTP password for username
+
+
+
+ Base class for FTP features
+
+
+
+
+ Provides functions to read and decode Fanuc files
+
+
+
+
+ Connect robot IP address or host name
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ FTP username
+ FTP password for username
+
+
+
+ Indicates that FTP connection is active
+
+
+
+
+ Disconnects from FTP server
+
+
+
+
+ Delegate to track upload progress. The value provided is in the range 0 to 100
+
+ The value provided is in the range 0 to 100
+
+
+
+ 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.
+ It overwrites file if it already exists.
+
+ The full data of the file, as a stream
+ The full or relative path to the file on the server
+ Create the remote directory if it does not exist. Slows down upload due to additional checks required.
+ 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.
+ It overwrites file if it already exists.
+
+ The full data of the file, as a byte array
+ The full or relative path to the file on the server
+ Create the remote directory if it does not exist. Slows down upload due to additional checks required.
+ 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 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
+ Create the remote directory if it does not exist. Slows down upload due to additional checks required.
+ 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.
+
+
+
+ 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
+ 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.
+ 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
+ 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 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.
+ It overwrites the file if it already exists.
+
+ The full or relative path to the file on the local file system
+ 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.
+
+
+
+ Checks if a file exists on the server.
+
+ The full or relative path to the file
+ True if the file exists
+
+
+
+ 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.
+
+
+
+ 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
+
+
+
+ Deletes the specified directory and all its contents.
+
+ The full or relative path of the directory to delete
+
+
+
+ Deletes a file on the server
+
+ The full or relative path to the file
+
+
+
+ Gets a file listing from the server. Each object returned
+ contains information about the file that was able to be retrieved.
+
+ The path of the directory to list
+ An array of FtpListItem objects
+
+
+
+ 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
+ A FtpListItem object
+
+
+
+ Internal implementation of FTP Client
+
+
+
+
+ Provides functions to read and decode Fanuc FTP files
+
+
+
+
+ Provides functions to read and decode Fanuc FTP diagnostic files *.dg
+
+
+
+
+ Provides functions to read and decode Fanuc FTP variable files *.va
+
+
+
+
+ Provides functions to read and decode Fanuc FTP diagnostic files *.dg
+
+
+
+
+ Provides functions to read and decode Fanuc FTP variable files *.va
+
+
+
+
+ Represents a file system object on the server
+
+
+
+
+ Gets the size of the object.
+
+
+
+
+ Gets the file permissions in the CHMOD format.
+
+
+
+
+ Gets the created date of the object.
+
+
+
+
+ Gets the full path name to the object.
+
+
+
+
+ Gets name to the object.
+
+
+
+
+ Gets the last write time of the object.
+
+
+
+
+ Gets the type of file system object.
+
+
+
+
+ Type of file system of object
+
+
+
+
+ A file
+
+
+
+
+ A directory
+
+
+
+
+ A symbolic link
+
+
+
+
+ Base class for Telnet KCL client
+
+
+
+
+ Connect robot IP address or host name
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ Telnet password associated with KCL user
+
+
+
+ Is Telnet client connected
+
+
+
+
+ Disconnect Telnet client from robot
+
+
+
+
+ Aborts the specified running or paused task. If prog_ name is not specified, the default program Is used.
+ Execution of the current program statement Is completed before the task aborts except for the current motion, DELAY, WAIT, Or READ statements, which are canceled.
+
+ The name of any KAREL or TP program which is a task
+ Aborts all running or paused tasks
+
+
+
+ Aborts all running or paused tasks.
+ Execution of the current program statement Is completed before the task aborts except for the current motion, DELAY, WAIT, Or READ statements, which are canceled.
+
+ Aborts all running or paused tasks
+
+
+
+ Clears all KAREL and teach pendant programs and variable data from memory.
+ All cleared programs And variables (if they were saved with the SaveVars() command) can be reloaded into memory Using the Load() command.
+
+
+
+
+ Clears the program data from memory for the specified or default program.
+
+ The name of any KAREL or teach pendant program in memory
+
+
+
+ Clears the variable and type data associated with the specified or default program from memory.
+ Variables And types that are referenced by a loaded program are Not cleared.
+
+ The name of any KAREL or teach pendant program with variables
+
+
+
+ Continues program execution of the specified task (or all paused tasks if program argument is null) that has been paused by a hold, pause, or test run operation.
+ If the program Is aborted, the program execution Is started at the first executable line.
+ When a task Is paused, the CYCLE START button on the operator panel has the same effect as the Continue() command.
+ Continue is a motion command; therefore, the device from which it Is issued must have motion control.
+
+ The name of any KAREL or teach pendant program which is a task. If null, it continues all paused tasks
+
+
+
+ Pauses the specified or default program that is being executed and holds motion at the current position (after a normal deceleration).
+ Use the Continue() command Or the CYCLE START button On the Operator panel To resume program execution.
+
+ The name of any KAREL or TP program. If null, it holds all executing programs
+
+
+
+ Pauses the specified running task. If program is not specified, the default program is used.
+ Execution of the current motion segment and the current program statement is completed before the task is paused.
+ Condition handlers remain active. If the condition handler action is NOPAUSE and the condition is satisfied, task execution resumes.
+ If the statement is a WAIT FOR and the wait condition is satisfied while the task is paused, the statement following the WAIT FOR is executed immediately when the task is resumed.
+ If the statement is a DELAY, timing will continue while the task is paused.
+ If the delay time is finished while the task is paused, the statement following the DELAY is immediately executed when the task is resumed.
+ If the statement is a READ, it will accept input even though the task is paused.
+ The Continue() command resumes execution of a paused task.
+ When a task is paused, the CYCLE START button on the operator panel has the same effect as the KCL> CONTINUE command.
+
+ the name of any KAREL or TP program which is a task. If null, it pauses all running tasks.
+ Pauses the task even if the NOPAUSE attribute is set
+
+
+
+ Enables servo power after an error condition has shut off servo power, provided the cause of the error has been cleared.
+ The command also clears the message line on the CRT/KB display. The error message remains displayed if the error condition still exists.
+ The Reset() command has no effect on a program that is being executed. It has the same effect as the FAULT RESET button on the operator panel and the RESET function key on the teach pendant RESET screen.
+
+
+
+
+ Executes the specified program. The program must be loaded in memory
+ If no program is specified the default program is run. If uninitialized variables are encountered, program execution is paused.
+ Execution begins at the first executable line.
+ RUN is a motion command; therefore, the device from which it is issued must have motion control. If a RUN command is issued in a command file, it is executed as a NOWAIT command.
+ Therefore, the statement following the RUN command will be executed immediately after the RUN command is issued without waiting for the program, specified by the RUN command, to end. '''
+ The name of any KAREL or TP program.
+
+
+
+ Assigns the specified value to a specified input or output port. SET PORT can be used either physical Or simulated output ports, but only With simulated input ports.
+
+ Port type
+ Port index
+ port value. For boolean ports, true is 1 and 0 is false
+
+
+
+ Assigns the specified value to the specified variable. You can assign constant values or variable values, but the value must be of the data type that has been declared for the variable.
+ You can assign values to system variables with KCL write access, to program variables, or to standard and user-defined variables and fields. You can assign only one ARRAY element.
+ Use brackets ([]) after the variable name to specify an element.
+ Certain data types like positions and vectors might have more than one value specified. '''
+ A valid program variable
+ New value for variable or a program or system variable
+ The name of any KAREL or TP program.
+
+
+
+ Assigns the specified value to the specified variable. You can assign constant values or variable values, but the value must be of the data type that has been declared for the variable.
+ You can assign values to system variables with KCL write access, to program variables, or to standard and user-defined variables and fields. You can assign only one ARRAY element.
+ Use brackets ([]) after the variable name to specify an element.
+ Certain data types like positions and vectors might have more than one value specified. '''
+ A valid program variable
+ New value for variable or a program or system variable
+ The name of any KAREL or TP program.
+
+
+
+ Returns the position of the TCP relative to the current user frame of reference with an x, y, and z location in millimeters; w, p, and r orientation in degrees; and the current configuration string. Be sure the robot is calibrated.
+
+
+
+
+ Returns the status information of the specified or default program being executed.
+
+ The name of any KAREL or TP program in memory
+
+
+
+ Simulating I/O allows you to test a program that uses I/O. Simulating I/O does not actually send output signals or receive input signals.
+ When simulating a port value, you can specify its initial simulated value or allow the initial value to be the same as the physical port value. If no value is specified, the current physical port value is used. '''
+ I/O port type
+ I/O port index
+ New value for the port
+
+
+
+ Skips execution of the current statement in the specified task.
+ If programm is not specified, the default program is used.
+ It has no effect when a task is running or when the system is in a READY state.
+ Entire motion statements are skipped with this command. You cannot skip single motion segments.
+ The Continue() command resumes execution of the paused task with the statement following the last skipped statement. END statements cannot be skipped.
+ If you skip the last RETURN statement in a function routine, there is no way to return the value of the function to the calling program. Therefore, when executing the END statement of the routine, the task will abort.
+ If you skip into a FOR loop, you have skipped the statement that initializes the loop counter. When the ENDFOR statement is executed the program will try to remove the loop counter from the stack. If the FOR loop was nested in another FOR loop, the loop counter for the previous FOR loop will be removed from the stack, causing potentially invalid results. If the FOR loop was not nested, a stack underflow error will occur, causing the task to abort.
+ READ, MOVE, DELAY, WAIT FOR, and PULSE statements can be paused after they have begun execution. In these cases, when the task is resumed, execution of the paused statement must be finished before subsequent statements are executed. Subsequent skipped statements will not be executed.
+ In particular, READ and WAIT FOR statements often require user intervention, such as entering data, before statement execution is completed.
+ Step mode operation and step mode type have no effect on the Skip() command.
+
+ The name of any KAREL or TP program which is a task
+
+
+
+ Discontinues simulation on all input or output port. When a port is unsimulated, the physical value replaces the simulated value.
+
+
+
+
+
+ Discontinues simulation of the specified input or output port. When a port is unsimulated, the physical value replaces the simulated value.
+
+ I/O port type
+ I/O port index to unsimulate
+
+
+
+
+ Internal implementation of KCL Client
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ Telnet password associated with KCL user
+
+
+
+ Main class that represents a connection to a Fanuc Motoman industrial robot
+
+
+
+
+ Create a new instance of a robot communication
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ Telnet password associated with KCL user
+
+
+
+ Information about a license number
+
+
+
+
+ Create a new LicenseInfo instance to retrieve informations about a pair of identifier/key
+ This class should not be used to register your product. Please use static function UnderAutomation.UniversalRobot.UniversalRobotInterface.RegisterLicense to register a license.
+
+ The name of your organization (null for trial version)
+ The key, associated to the identifier, supplied by UnderAutomation (null for trial version)
+
+
+
+ Throw a InvalidLicenseException if the license is Invalid or Expired
+
+
+
+
+ The license key supplied by UnderAutomation (null for trial period)
+
+
+
+
+ Commercial name of this .NET Software library
+
+
+
+
+ Remaining days of the trial period. Null if the product is licensed. It could be negative if the trial period is ended since several days.
+
+
+
+
+ The date the trial period starts. If the product is licensed, the date of the library first use.
+
+
+
+
+ Name of your organisation
+
+
+
+
+ The date the product will expire. Null if the product is licensed.
+
+
+
+
+ The current license state
+
+
+
+
+ The date this version of the product was released.
+
+
+
+
+ Number of maintenance years included in your license
+
+
+
+
+ The date you get the license
+
+
+
+
+ The date your maintenance contract end and you no longer can use this license with newer versions.
+
+
+
+
+ A human description of the license
+
+
+
+
+ States that can take a license
+
+
+
+
+ The pair License Identifier and License Key are incompatible, you cannot use the library
+
+
+
+
+ The library is in a trial period, you can use the library
+
+
+
+
+ The library is in an extra trial period, you can use the library
+
+
+
+
+ The trial period as expired, you no more can use the library
+
+
+
+
+ Your license does not allow you to use such a recent release. Please buy maintenance to use this version
+
+
+
+
+ Congratulations, the library is licensed.
+
+
+
+
+ Exception thrown while using the product if the license is not valid.
+
+
+
+
+ The license that causes this exception
+
+
+
+
diff --git a/.NET/Libraries/netstandard2.0/UnderAutomation.Fanuc.dll b/.NET/Libraries/netstandard2.0/UnderAutomation.Fanuc.dll
new file mode 100644
index 0000000..4f7c65c
Binary files /dev/null and b/.NET/Libraries/netstandard2.0/UnderAutomation.Fanuc.dll differ
diff --git a/.NET/Libraries/netstandard2.0/UnderAutomation.Fanuc.xml b/.NET/Libraries/netstandard2.0/UnderAutomation.Fanuc.xml
new file mode 100644
index 0000000..e05933f
--- /dev/null
+++ b/.NET/Libraries/netstandard2.0/UnderAutomation.Fanuc.xml
@@ -0,0 +1,5100 @@
+
+
+
+ UnderAutomation.Fanuc
+
+
+
+
+ Initialize a conenction to the robot with specified parameters
+
+
+
+
+
+ Disconnect all services connected to the robot
+
+
+
+
+ If you have a license And a key, please call this static method to register the product And exit the trial period
+ ou can register a product even if the trial period has ended
+
+ Your organization name
+ The associated key supplied by UnderAutomation
+ Information about the supplied license
+
+
+
+ Return information about your license
+
+
+
+
+ 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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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).
+
+
+
+
+ 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 FTP server. Overwritten in proxy classes.
+
+
+
+
+
+ Connect to the FTP server. Overwritten in proxy classes.
+
+
+
+
+ Called during Connect(). 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.
+
+
+
+
+ Disconnects from the server
+
+
+
+
+ Initiates a disconnection on the server
+
+ method
+ State object
+ IAsyncResult
+
+
+
+
+ Ends a call to
+
+ returned from
+
+
+
+
+ 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
+
+
+
+
+ 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?
+
+
+
+ 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.
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+ 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.
+
+
+
+ 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.
+
+
+
+ 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 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 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-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-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 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.
+
+
+
+
+ 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.
+
+
+
+
+ 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 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.
+
+
+
+ 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.
+
+
+
+
+ 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 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.
+
+
+
+ Download a file from the server and write the data into the given stream.
+ 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.
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+ 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.
+
+
+
+
+ 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 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 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 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
+
+
+
+
+ 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
+
+
+
+ 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 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
+
+
+
+
+ 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.
+
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+
+ 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 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
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+
+ 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 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.
+
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+ 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 "UnderAutomation.Fanuc.Ftp.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
+ 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.
+
+
+ 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
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+
+ 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 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
+
+
+
+ Writes data to the stream
+
+ Buffer to write to stream
+ Where in the buffer to start
+ Number of bytes to be read
+
+
+
+ Writes a line to the stream using the specified encoding
+
+ 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
+
+
+
+ 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 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
+
+
+
+
+ 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)
+
+
+
+
+ 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.
+
+
+
+
+ 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.
+
+
+
+
+ FTP Client connection to a robot
+
+
+
+
+ Instanciate a new FTP client connection
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ FTP username
+ FTP password for username
+
+
+
+ Base class for FTP features
+
+
+
+
+ Provides functions to read and decode Fanuc files
+
+
+
+
+ Connect robot IP address or host name
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ FTP username
+ FTP password for username
+
+
+
+ Indicates that FTP connection is active
+
+
+
+
+ Disconnects from FTP server
+
+
+
+
+ Delegate to track upload progress. The value provided is in the range 0 to 100
+
+ The value provided is in the range 0 to 100
+
+
+
+ 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.
+ It overwrites file if it already exists.
+
+ The full data of the file, as a stream
+ The full or relative path to the file on the server
+ Create the remote directory if it does not exist. Slows down upload due to additional checks required.
+ 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.
+ It overwrites file if it already exists.
+
+ The full data of the file, as a byte array
+ The full or relative path to the file on the server
+ Create the remote directory if it does not exist. Slows down upload due to additional checks required.
+ 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 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
+ Create the remote directory if it does not exist. Slows down upload due to additional checks required.
+ 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.
+
+
+
+ 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
+ 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.
+ 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
+ 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 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.
+ It overwrites the file if it already exists.
+
+ The full or relative path to the file on the local file system
+ 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.
+
+
+
+ Checks if a file exists on the server.
+
+ The full or relative path to the file
+ True if the file exists
+
+
+
+ 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.
+
+
+
+ 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
+
+
+
+ Deletes the specified directory and all its contents.
+
+ The full or relative path of the directory to delete
+
+
+
+ Deletes a file on the server
+
+ The full or relative path to the file
+
+
+
+ Gets a file listing from the server. Each object returned
+ contains information about the file that was able to be retrieved.
+
+ The path of the directory to list
+ An array of FtpListItem objects
+
+
+
+ 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
+ A FtpListItem object
+
+
+
+ Internal implementation of FTP Client
+
+
+
+
+ Provides functions to read and decode Fanuc FTP files
+
+
+
+
+ Provides functions to read and decode Fanuc FTP diagnostic files *.dg
+
+
+
+
+ Provides functions to read and decode Fanuc FTP variable files *.va
+
+
+
+
+ Provides functions to read and decode Fanuc FTP diagnostic files *.dg
+
+
+
+
+ Provides functions to read and decode Fanuc FTP variable files *.va
+
+
+
+
+ Represents a file system object on the server
+
+
+
+
+ Gets the size of the object.
+
+
+
+
+ Gets the file permissions in the CHMOD format.
+
+
+
+
+ Gets the created date of the object.
+
+
+
+
+ Gets the full path name to the object.
+
+
+
+
+ Gets name to the object.
+
+
+
+
+ Gets the last write time of the object.
+
+
+
+
+ Gets the type of file system object.
+
+
+
+
+ Type of file system of object
+
+
+
+
+ A file
+
+
+
+
+ A directory
+
+
+
+
+ A symbolic link
+
+
+
+
+ Base class for Telnet KCL client
+
+
+
+
+ Connect robot IP address or host name
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ Telnet password associated with KCL user
+
+
+
+ Is Telnet client connected
+
+
+
+
+ Disconnect Telnet client from robot
+
+
+
+
+ Aborts the specified running or paused task. If prog_ name is not specified, the default program Is used.
+ Execution of the current program statement Is completed before the task aborts except for the current motion, DELAY, WAIT, Or READ statements, which are canceled.
+
+ The name of any KAREL or TP program which is a task
+ Aborts all running or paused tasks
+
+
+
+ Aborts all running or paused tasks.
+ Execution of the current program statement Is completed before the task aborts except for the current motion, DELAY, WAIT, Or READ statements, which are canceled.
+
+ Aborts all running or paused tasks
+
+
+
+ Clears all KAREL and teach pendant programs and variable data from memory.
+ All cleared programs And variables (if they were saved with the SaveVars() command) can be reloaded into memory Using the Load() command.
+
+
+
+
+ Clears the program data from memory for the specified or default program.
+
+ The name of any KAREL or teach pendant program in memory
+
+
+
+ Clears the variable and type data associated with the specified or default program from memory.
+ Variables And types that are referenced by a loaded program are Not cleared.
+
+ The name of any KAREL or teach pendant program with variables
+
+
+
+ Continues program execution of the specified task (or all paused tasks if program argument is null) that has been paused by a hold, pause, or test run operation.
+ If the program Is aborted, the program execution Is started at the first executable line.
+ When a task Is paused, the CYCLE START button on the operator panel has the same effect as the Continue() command.
+ Continue is a motion command; therefore, the device from which it Is issued must have motion control.
+
+ The name of any KAREL or teach pendant program which is a task. If null, it continues all paused tasks
+
+
+
+ Pauses the specified or default program that is being executed and holds motion at the current position (after a normal deceleration).
+ Use the Continue() command Or the CYCLE START button On the Operator panel To resume program execution.
+
+ The name of any KAREL or TP program. If null, it holds all executing programs
+
+
+
+ Pauses the specified running task. If program is not specified, the default program is used.
+ Execution of the current motion segment and the current program statement is completed before the task is paused.
+ Condition handlers remain active. If the condition handler action is NOPAUSE and the condition is satisfied, task execution resumes.
+ If the statement is a WAIT FOR and the wait condition is satisfied while the task is paused, the statement following the WAIT FOR is executed immediately when the task is resumed.
+ If the statement is a DELAY, timing will continue while the task is paused.
+ If the delay time is finished while the task is paused, the statement following the DELAY is immediately executed when the task is resumed.
+ If the statement is a READ, it will accept input even though the task is paused.
+ The Continue() command resumes execution of a paused task.
+ When a task is paused, the CYCLE START button on the operator panel has the same effect as the KCL> CONTINUE command.
+
+ the name of any KAREL or TP program which is a task. If null, it pauses all running tasks.
+ Pauses the task even if the NOPAUSE attribute is set
+
+
+
+ Enables servo power after an error condition has shut off servo power, provided the cause of the error has been cleared.
+ The command also clears the message line on the CRT/KB display. The error message remains displayed if the error condition still exists.
+ The Reset() command has no effect on a program that is being executed. It has the same effect as the FAULT RESET button on the operator panel and the RESET function key on the teach pendant RESET screen.
+
+
+
+
+ Executes the specified program. The program must be loaded in memory
+ If no program is specified the default program is run. If uninitialized variables are encountered, program execution is paused.
+ Execution begins at the first executable line.
+ RUN is a motion command; therefore, the device from which it is issued must have motion control. If a RUN command is issued in a command file, it is executed as a NOWAIT command.
+ Therefore, the statement following the RUN command will be executed immediately after the RUN command is issued without waiting for the program, specified by the RUN command, to end. '''
+ The name of any KAREL or TP program.
+
+
+
+ Assigns the specified value to a specified input or output port. SET PORT can be used either physical Or simulated output ports, but only With simulated input ports.
+
+ Port type
+ Port index
+ port value. For boolean ports, true is 1 and 0 is false
+
+
+
+ Assigns the specified value to the specified variable. You can assign constant values or variable values, but the value must be of the data type that has been declared for the variable.
+ You can assign values to system variables with KCL write access, to program variables, or to standard and user-defined variables and fields. You can assign only one ARRAY element.
+ Use brackets ([]) after the variable name to specify an element.
+ Certain data types like positions and vectors might have more than one value specified. '''
+ A valid program variable
+ New value for variable or a program or system variable
+ The name of any KAREL or TP program.
+
+
+
+ Assigns the specified value to the specified variable. You can assign constant values or variable values, but the value must be of the data type that has been declared for the variable.
+ You can assign values to system variables with KCL write access, to program variables, or to standard and user-defined variables and fields. You can assign only one ARRAY element.
+ Use brackets ([]) after the variable name to specify an element.
+ Certain data types like positions and vectors might have more than one value specified. '''
+ A valid program variable
+ New value for variable or a program or system variable
+ The name of any KAREL or TP program.
+
+
+
+ Returns the position of the TCP relative to the current user frame of reference with an x, y, and z location in millimeters; w, p, and r orientation in degrees; and the current configuration string. Be sure the robot is calibrated.
+
+
+
+
+ Returns the status information of the specified or default program being executed.
+
+ The name of any KAREL or TP program in memory
+
+
+
+ Simulating I/O allows you to test a program that uses I/O. Simulating I/O does not actually send output signals or receive input signals.
+ When simulating a port value, you can specify its initial simulated value or allow the initial value to be the same as the physical port value. If no value is specified, the current physical port value is used. '''
+ I/O port type
+ I/O port index
+ New value for the port
+
+
+
+ Skips execution of the current statement in the specified task.
+ If programm is not specified, the default program is used.
+ It has no effect when a task is running or when the system is in a READY state.
+ Entire motion statements are skipped with this command. You cannot skip single motion segments.
+ The Continue() command resumes execution of the paused task with the statement following the last skipped statement. END statements cannot be skipped.
+ If you skip the last RETURN statement in a function routine, there is no way to return the value of the function to the calling program. Therefore, when executing the END statement of the routine, the task will abort.
+ If you skip into a FOR loop, you have skipped the statement that initializes the loop counter. When the ENDFOR statement is executed the program will try to remove the loop counter from the stack. If the FOR loop was nested in another FOR loop, the loop counter for the previous FOR loop will be removed from the stack, causing potentially invalid results. If the FOR loop was not nested, a stack underflow error will occur, causing the task to abort.
+ READ, MOVE, DELAY, WAIT FOR, and PULSE statements can be paused after they have begun execution. In these cases, when the task is resumed, execution of the paused statement must be finished before subsequent statements are executed. Subsequent skipped statements will not be executed.
+ In particular, READ and WAIT FOR statements often require user intervention, such as entering data, before statement execution is completed.
+ Step mode operation and step mode type have no effect on the Skip() command.
+
+ The name of any KAREL or TP program which is a task
+
+
+
+ Discontinues simulation on all input or output port. When a port is unsimulated, the physical value replaces the simulated value.
+
+
+
+
+
+ Discontinues simulation of the specified input or output port. When a port is unsimulated, the physical value replaces the simulated value.
+
+ I/O port type
+ I/O port index to unsimulate
+
+
+
+
+ Internal implementation of KCL Client
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ Telnet password associated with KCL user
+
+
+
+ Main class that represents a connection to a Fanuc Motoman industrial robot
+
+
+
+
+ Create a new instance of a robot communication
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ Telnet password associated with KCL user
+
+
+
+ Information about a license number
+
+
+
+
+ Create a new LicenseInfo instance to retrieve informations about a pair of identifier/key
+ This class should not be used to register your product. Please use static function UnderAutomation.UniversalRobot.UniversalRobotInterface.RegisterLicense to register a license.
+
+ The name of your organization (null for trial version)
+ The key, associated to the identifier, supplied by UnderAutomation (null for trial version)
+
+
+
+ Throw a InvalidLicenseException if the license is Invalid or Expired
+
+
+
+
+ The license key supplied by UnderAutomation (null for trial period)
+
+
+
+
+ Commercial name of this .NET Software library
+
+
+
+
+ Remaining days of the trial period. Null if the product is licensed. It could be negative if the trial period is ended since several days.
+
+
+
+
+ The date the trial period starts. If the product is licensed, the date of the library first use.
+
+
+
+
+ Name of your organisation
+
+
+
+
+ The date the product will expire. Null if the product is licensed.
+
+
+
+
+ The current license state
+
+
+
+
+ The date this version of the product was released.
+
+
+
+
+ Number of maintenance years included in your license
+
+
+
+
+ The date you get the license
+
+
+
+
+ The date your maintenance contract end and you no longer can use this license with newer versions.
+
+
+
+
+ A human description of the license
+
+
+
+
+ States that can take a license
+
+
+
+
+ The pair License Identifier and License Key are incompatible, you cannot use the library
+
+
+
+
+ The library is in a trial period, you can use the library
+
+
+
+
+ The library is in an extra trial period, you can use the library
+
+
+
+
+ The trial period as expired, you no more can use the library
+
+
+
+
+ Your license does not allow you to use such a recent release. Please buy maintenance to use this version
+
+
+
+
+ Congratulations, the library is licensed.
+
+
+
+
+ Exception thrown while using the product if the license is not valid.
+
+
+
+
+ The license that causes this exception
+
+
+
+
diff --git a/.NET/Libraries/netstandard2.1/UnderAutomation.Fanuc.dll b/.NET/Libraries/netstandard2.1/UnderAutomation.Fanuc.dll
new file mode 100644
index 0000000..998db0e
Binary files /dev/null and b/.NET/Libraries/netstandard2.1/UnderAutomation.Fanuc.dll differ
diff --git a/.NET/Libraries/netstandard2.1/UnderAutomation.Fanuc.xml b/.NET/Libraries/netstandard2.1/UnderAutomation.Fanuc.xml
new file mode 100644
index 0000000..e05933f
--- /dev/null
+++ b/.NET/Libraries/netstandard2.1/UnderAutomation.Fanuc.xml
@@ -0,0 +1,5100 @@
+
+
+
+ UnderAutomation.Fanuc
+
+
+
+
+ Initialize a conenction to the robot with specified parameters
+
+
+
+
+
+ Disconnect all services connected to the robot
+
+
+
+
+ If you have a license And a key, please call this static method to register the product And exit the trial period
+ ou can register a product even if the trial period has ended
+
+ Your organization name
+ The associated key supplied by UnderAutomation
+ Information about the supplied license
+
+
+
+ Return information about your license
+
+
+
+
+ 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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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
+ UnderAutomation.Fanuc.Ftp.FluentFTP gets in return. Please review the Debug example
+ below for information on how to add s for capturing
+ the conversation between UnderAutomation.Fanuc.Ftp.FluentFTP and the server.
+
+ The following example illustrates how to assist in debugging
+ UnderAutomation.Fanuc.Ftp.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).
+
+
+
+
+ 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 FTP server. Overwritten in proxy classes.
+
+
+
+
+
+ Connect to the FTP server. Overwritten in proxy classes.
+
+
+
+
+ Called during Connect(). 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.
+
+
+
+
+ Disconnects from the server
+
+
+
+
+ Initiates a disconnection on the server
+
+ method
+ State object
+ IAsyncResult
+
+
+
+
+ Ends a call to
+
+ returned from
+
+
+
+
+ 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
+
+
+
+
+ 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?
+
+
+
+ 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.
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+ 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.
+
+
+
+ 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.
+
+
+
+ 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 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 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-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-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 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.
+
+
+
+
+ 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.
+
+
+
+
+ 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 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.
+
+
+
+ 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.
+
+
+
+
+ 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 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.
+
+
+
+ Download a file from the server and write the data into the given stream.
+ 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.
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+ 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.
+
+
+
+
+ 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 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 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 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
+
+
+
+
+ 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
+
+
+
+ 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 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
+
+
+
+
+ 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.
+
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+
+ 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 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
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+
+ 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 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.
+
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
+ 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 "UnderAutomation.Fanuc.Ftp.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
+ 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.
+
+
+ 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
+
+
+
+ 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
+
+
+
+ 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
+
+
+
+
+ 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 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
+
+
+
+ Writes data to the stream
+
+ Buffer to write to stream
+ Where in the buffer to start
+ Number of bytes to be read
+
+
+
+ Writes a line to the stream using the specified encoding
+
+ 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
+
+
+
+ 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 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
+
+
+
+
+ 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)
+
+
+
+
+ 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.
+
+
+
+
+ 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.
+
+
+
+
+ FTP Client connection to a robot
+
+
+
+
+ Instanciate a new FTP client connection
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ FTP username
+ FTP password for username
+
+
+
+ Base class for FTP features
+
+
+
+
+ Provides functions to read and decode Fanuc files
+
+
+
+
+ Connect robot IP address or host name
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ FTP username
+ FTP password for username
+
+
+
+ Indicates that FTP connection is active
+
+
+
+
+ Disconnects from FTP server
+
+
+
+
+ Delegate to track upload progress. The value provided is in the range 0 to 100
+
+ The value provided is in the range 0 to 100
+
+
+
+ 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.
+ It overwrites file if it already exists.
+
+ The full data of the file, as a stream
+ The full or relative path to the file on the server
+ Create the remote directory if it does not exist. Slows down upload due to additional checks required.
+ 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.
+ It overwrites file if it already exists.
+
+ The full data of the file, as a byte array
+ The full or relative path to the file on the server
+ Create the remote directory if it does not exist. Slows down upload due to additional checks required.
+ 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 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
+ Create the remote directory if it does not exist. Slows down upload due to additional checks required.
+ 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.
+
+
+
+ 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
+ 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.
+ 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
+ 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 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.
+ It overwrites the file if it already exists.
+
+ The full or relative path to the file on the local file system
+ 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.
+
+
+
+ Checks if a file exists on the server.
+
+ The full or relative path to the file
+ True if the file exists
+
+
+
+ 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.
+
+
+
+ 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
+
+
+
+ Deletes the specified directory and all its contents.
+
+ The full or relative path of the directory to delete
+
+
+
+ Deletes a file on the server
+
+ The full or relative path to the file
+
+
+
+ Gets a file listing from the server. Each object returned
+ contains information about the file that was able to be retrieved.
+
+ The path of the directory to list
+ An array of FtpListItem objects
+
+
+
+ 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
+ A FtpListItem object
+
+
+
+ Internal implementation of FTP Client
+
+
+
+
+ Provides functions to read and decode Fanuc FTP files
+
+
+
+
+ Provides functions to read and decode Fanuc FTP diagnostic files *.dg
+
+
+
+
+ Provides functions to read and decode Fanuc FTP variable files *.va
+
+
+
+
+ Provides functions to read and decode Fanuc FTP diagnostic files *.dg
+
+
+
+
+ Provides functions to read and decode Fanuc FTP variable files *.va
+
+
+
+
+ Represents a file system object on the server
+
+
+
+
+ Gets the size of the object.
+
+
+
+
+ Gets the file permissions in the CHMOD format.
+
+
+
+
+ Gets the created date of the object.
+
+
+
+
+ Gets the full path name to the object.
+
+
+
+
+ Gets name to the object.
+
+
+
+
+ Gets the last write time of the object.
+
+
+
+
+ Gets the type of file system object.
+
+
+
+
+ Type of file system of object
+
+
+
+
+ A file
+
+
+
+
+ A directory
+
+
+
+
+ A symbolic link
+
+
+
+
+ Base class for Telnet KCL client
+
+
+
+
+ Connect robot IP address or host name
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ Telnet password associated with KCL user
+
+
+
+ Is Telnet client connected
+
+
+
+
+ Disconnect Telnet client from robot
+
+
+
+
+ Aborts the specified running or paused task. If prog_ name is not specified, the default program Is used.
+ Execution of the current program statement Is completed before the task aborts except for the current motion, DELAY, WAIT, Or READ statements, which are canceled.
+
+ The name of any KAREL or TP program which is a task
+ Aborts all running or paused tasks
+
+
+
+ Aborts all running or paused tasks.
+ Execution of the current program statement Is completed before the task aborts except for the current motion, DELAY, WAIT, Or READ statements, which are canceled.
+
+ Aborts all running or paused tasks
+
+
+
+ Clears all KAREL and teach pendant programs and variable data from memory.
+ All cleared programs And variables (if they were saved with the SaveVars() command) can be reloaded into memory Using the Load() command.
+
+
+
+
+ Clears the program data from memory for the specified or default program.
+
+ The name of any KAREL or teach pendant program in memory
+
+
+
+ Clears the variable and type data associated with the specified or default program from memory.
+ Variables And types that are referenced by a loaded program are Not cleared.
+
+ The name of any KAREL or teach pendant program with variables
+
+
+
+ Continues program execution of the specified task (or all paused tasks if program argument is null) that has been paused by a hold, pause, or test run operation.
+ If the program Is aborted, the program execution Is started at the first executable line.
+ When a task Is paused, the CYCLE START button on the operator panel has the same effect as the Continue() command.
+ Continue is a motion command; therefore, the device from which it Is issued must have motion control.
+
+ The name of any KAREL or teach pendant program which is a task. If null, it continues all paused tasks
+
+
+
+ Pauses the specified or default program that is being executed and holds motion at the current position (after a normal deceleration).
+ Use the Continue() command Or the CYCLE START button On the Operator panel To resume program execution.
+
+ The name of any KAREL or TP program. If null, it holds all executing programs
+
+
+
+ Pauses the specified running task. If program is not specified, the default program is used.
+ Execution of the current motion segment and the current program statement is completed before the task is paused.
+ Condition handlers remain active. If the condition handler action is NOPAUSE and the condition is satisfied, task execution resumes.
+ If the statement is a WAIT FOR and the wait condition is satisfied while the task is paused, the statement following the WAIT FOR is executed immediately when the task is resumed.
+ If the statement is a DELAY, timing will continue while the task is paused.
+ If the delay time is finished while the task is paused, the statement following the DELAY is immediately executed when the task is resumed.
+ If the statement is a READ, it will accept input even though the task is paused.
+ The Continue() command resumes execution of a paused task.
+ When a task is paused, the CYCLE START button on the operator panel has the same effect as the KCL> CONTINUE command.
+
+ the name of any KAREL or TP program which is a task. If null, it pauses all running tasks.
+ Pauses the task even if the NOPAUSE attribute is set
+
+
+
+ Enables servo power after an error condition has shut off servo power, provided the cause of the error has been cleared.
+ The command also clears the message line on the CRT/KB display. The error message remains displayed if the error condition still exists.
+ The Reset() command has no effect on a program that is being executed. It has the same effect as the FAULT RESET button on the operator panel and the RESET function key on the teach pendant RESET screen.
+
+
+
+
+ Executes the specified program. The program must be loaded in memory
+ If no program is specified the default program is run. If uninitialized variables are encountered, program execution is paused.
+ Execution begins at the first executable line.
+ RUN is a motion command; therefore, the device from which it is issued must have motion control. If a RUN command is issued in a command file, it is executed as a NOWAIT command.
+ Therefore, the statement following the RUN command will be executed immediately after the RUN command is issued without waiting for the program, specified by the RUN command, to end. '''
+ The name of any KAREL or TP program.
+
+
+
+ Assigns the specified value to a specified input or output port. SET PORT can be used either physical Or simulated output ports, but only With simulated input ports.
+
+ Port type
+ Port index
+ port value. For boolean ports, true is 1 and 0 is false
+
+
+
+ Assigns the specified value to the specified variable. You can assign constant values or variable values, but the value must be of the data type that has been declared for the variable.
+ You can assign values to system variables with KCL write access, to program variables, or to standard and user-defined variables and fields. You can assign only one ARRAY element.
+ Use brackets ([]) after the variable name to specify an element.
+ Certain data types like positions and vectors might have more than one value specified. '''
+ A valid program variable
+ New value for variable or a program or system variable
+ The name of any KAREL or TP program.
+
+
+
+ Assigns the specified value to the specified variable. You can assign constant values or variable values, but the value must be of the data type that has been declared for the variable.
+ You can assign values to system variables with KCL write access, to program variables, or to standard and user-defined variables and fields. You can assign only one ARRAY element.
+ Use brackets ([]) after the variable name to specify an element.
+ Certain data types like positions and vectors might have more than one value specified. '''
+ A valid program variable
+ New value for variable or a program or system variable
+ The name of any KAREL or TP program.
+
+
+
+ Returns the position of the TCP relative to the current user frame of reference with an x, y, and z location in millimeters; w, p, and r orientation in degrees; and the current configuration string. Be sure the robot is calibrated.
+
+
+
+
+ Returns the status information of the specified or default program being executed.
+
+ The name of any KAREL or TP program in memory
+
+
+
+ Simulating I/O allows you to test a program that uses I/O. Simulating I/O does not actually send output signals or receive input signals.
+ When simulating a port value, you can specify its initial simulated value or allow the initial value to be the same as the physical port value. If no value is specified, the current physical port value is used. '''
+ I/O port type
+ I/O port index
+ New value for the port
+
+
+
+ Skips execution of the current statement in the specified task.
+ If programm is not specified, the default program is used.
+ It has no effect when a task is running or when the system is in a READY state.
+ Entire motion statements are skipped with this command. You cannot skip single motion segments.
+ The Continue() command resumes execution of the paused task with the statement following the last skipped statement. END statements cannot be skipped.
+ If you skip the last RETURN statement in a function routine, there is no way to return the value of the function to the calling program. Therefore, when executing the END statement of the routine, the task will abort.
+ If you skip into a FOR loop, you have skipped the statement that initializes the loop counter. When the ENDFOR statement is executed the program will try to remove the loop counter from the stack. If the FOR loop was nested in another FOR loop, the loop counter for the previous FOR loop will be removed from the stack, causing potentially invalid results. If the FOR loop was not nested, a stack underflow error will occur, causing the task to abort.
+ READ, MOVE, DELAY, WAIT FOR, and PULSE statements can be paused after they have begun execution. In these cases, when the task is resumed, execution of the paused statement must be finished before subsequent statements are executed. Subsequent skipped statements will not be executed.
+ In particular, READ and WAIT FOR statements often require user intervention, such as entering data, before statement execution is completed.
+ Step mode operation and step mode type have no effect on the Skip() command.
+
+ The name of any KAREL or TP program which is a task
+
+
+
+ Discontinues simulation on all input or output port. When a port is unsimulated, the physical value replaces the simulated value.
+
+
+
+
+
+ Discontinues simulation of the specified input or output port. When a port is unsimulated, the physical value replaces the simulated value.
+
+ I/O port type
+ I/O port index to unsimulate
+
+
+
+
+ Internal implementation of KCL Client
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ Telnet password associated with KCL user
+
+
+
+ Main class that represents a connection to a Fanuc Motoman industrial robot
+
+
+
+
+ Create a new instance of a robot communication
+
+
+
+
+ Connect to a robot
+
+ IP or network name of the robot
+ Telnet password associated with KCL user
+
+
+
+ Information about a license number
+
+
+
+
+ Create a new LicenseInfo instance to retrieve informations about a pair of identifier/key
+ This class should not be used to register your product. Please use static function UnderAutomation.UniversalRobot.UniversalRobotInterface.RegisterLicense to register a license.
+
+ The name of your organization (null for trial version)
+ The key, associated to the identifier, supplied by UnderAutomation (null for trial version)
+
+
+
+ Throw a InvalidLicenseException if the license is Invalid or Expired
+
+
+
+
+ The license key supplied by UnderAutomation (null for trial period)
+
+
+
+
+ Commercial name of this .NET Software library
+
+
+
+
+ Remaining days of the trial period. Null if the product is licensed. It could be negative if the trial period is ended since several days.
+
+
+
+
+ The date the trial period starts. If the product is licensed, the date of the library first use.
+
+
+
+
+ Name of your organisation
+
+
+
+
+ The date the product will expire. Null if the product is licensed.
+
+
+
+
+ The current license state
+
+
+
+
+ The date this version of the product was released.
+
+
+
+
+ Number of maintenance years included in your license
+
+
+
+
+ The date you get the license
+
+
+
+
+ The date your maintenance contract end and you no longer can use this license with newer versions.
+
+
+
+
+ A human description of the license
+
+
+
+
+ States that can take a license
+
+
+
+
+ The pair License Identifier and License Key are incompatible, you cannot use the library
+
+
+
+
+ The library is in a trial period, you can use the library
+
+
+
+
+ The library is in an extra trial period, you can use the library
+
+
+
+
+ The trial period as expired, you no more can use the library
+
+
+
+
+ Your license does not allow you to use such a recent release. Please buy maintenance to use this version
+
+
+
+
+ Congratulations, the library is licensed.
+
+
+
+
+ Exception thrown while using the product if the license is not valid.
+
+
+
+
+ The license that causes this exception
+
+
+
+