CFtpConnection Class
Manages your FTP connection to an Internet server and allows direct manipulation of directories and files on that server.
Syntax
class CFtpConnection : public CInternetConnection
Members
Public Constructors
Name | Description |
---|---|
CFtpConnection::CFtpConnection | Constructs a CFtpConnection object. |
Public Methods
Name | Description |
---|---|
CFtpConnection::Command | Sends a command directly to an FTP server. |
CFtpConnection::CreateDirectory | Creates a directory on the server. |
CFtpConnection::GetCurrentDirectory | Gets the current directory for this connection. |
CFtpConnection::GetCurrentDirectoryAsURL | Gets the current directory for this connection as a URL. |
CFtpConnection::GetFile | Gets a file from the connected server |
CFtpConnection::OpenFile | Opens a file on the connected server. |
CFtpConnection::PutFile | Places a file on the server. |
CFtpConnection::Remove | Removes a file from the server. |
CFtpConnection::RemoveDirectory | Removes the specified directory from the server. |
CFtpConnection::Rename | Renames a file on the server. |
CFtpConnection::SetCurrentDirectory | Sets the current FTP directory. |
Remarks
FTP is one of the three Internet services recognized by the MFC WinInet classes.
To communicate with an FTP Internet server, you must first create an instance of CInternetSession, and then create a CFtpConnection
object. You never create a CFtpConnection
object directly; rather, call CInternetSession::GetFtpConnection, which creates the CFtpConnection
object and returns a pointer to it.
To learn more about how CFtpConnection
works with the other MFC Internet classes, see the article Internet Programming with WinInet. For more information about communicating with the other two supported services, HTTP and gopher, see the classes CHttpConnection and CGopherConnection.
Example
See the example in the CFtpFileFind class overview.
Inheritance Hierarchy
CFtpConnection
Requirements
Header: afxinet.h
CFtpConnection::CFtpConnection
This member function is called to construct a CFtpConnection
object.
CFtpConnection(
CInternetSession* pSession,
HINTERNET hConnected,
LPCTSTR pstrServer,
DWORD_PTR dwContext);
CFtpConnection(
CInternetSession* pSession,
LPCTSTR pstrServer,
LPCTSTR pstrUserName = NULL,
LPCTSTR pstrPassword = NULL,
DWORD_PTR dwContext = 0,
INTERNET_PORT nPort = INTERNET_INVALID_PORT_NUMBER,
BOOL bPassive = FALSE);
Parameters
pSession
A pointer to the related CInternetSession object.
hConnected
The Windows handle of the current Internet session.
pstrServer
A pointer to a string containing the FTP server name.
dwContext
The context identifier for the operation. dwContext identifies the operation's status information returned by CInternetSession::OnStatusCallback. The default is set to 1; however, you can explicitly assign a specific context ID for the operation. The object and any work it does will be associated with that context ID.
pstrUserName
Pointer to a null-terminated string that specifies the name of the user to log in. If NULL, the default is anonymous.
pstrPassword
A pointer to a null-terminated string that specifies the password to use to log in. If both pstrPassword and pstrUserName are NULL, the default anonymous password is the user's email name. If pstrPassword is NULL (or an empty string) but pstrUserName is not NULL, a blank password is used. The following table describes the behavior for the four possible settings of pstrUserName and pstrPassword:
pstrUserName | pstrPassword | Username sent to FTP server | Password sent to FTP server |
---|---|---|---|
NULL or " " | NULL or " " | "anonymous" | User's email name |
Non- NULL String | NULL or " " | pstrUserName | " " |
NULL Non- NULL String | ERROR | ERROR | |
Non- NULL String | Non- NULL String | pstrUserName | pstrPassword |
nPort
A number that identifies the TCP/IP port to use on the server.
bPassive
Specifies passive or active mode for this FTP session. If set to TRUE, it sets the Win32 API dwFlag to INTERNET_FLAG_PASSIVE.
Remarks
You never create a CFtpConnection
object directly. Instead, call CInternetSession::GetFtpConnection, which creates the CFptConnection
object.
CFtpConnection::Command
Sends a command directly to an FTP server.
CInternetFile* Command(
LPCTSTR pszCommand,
CmdResponseType eResponse = CmdRespNone,
DWORD dwFlags = FTP_TRANSFER_TYPE_BINARY,
DWORD_PTR dwContext = 1);
Parameters
pszCommand
A pointer to a string containing the command to be sent.
eResponse
Specifies whether a response is expected from the FTP server. Can be one of the following values:
CmdRespNone
No response is expected.CmdRespRead
A response is expected.CmdRespWrite
Not used.
The CmdResponseType is a member of CFtpConnection, defined in afxinet.h.
dwFlags
A value containing the flags that control this function. For a complete list, see FTPCommand.
dwContext
A pointer to a value containing an application-defined value used to identify the application context in callbacks.
Return Value
Nonzero if successful; otherwise 0.
Remarks
This member function emulates the functionality of the FTPCommand function, as described in the Windows SDK.
If an error occurs, MFC throws an exception of type CInternetException.
CFtpConnection::CreateDirectory
Call this member function to create a directory on the connected server.
BOOL CreateDirectory(LPCTSTR pstrDirName);
Parameters
pstrDirName
A pointer to a string containing the name of the directory to create.
Return Value
Nonzero if successful; otherwise 0. If the call fails, the Windows function GetLastError may be called to determine the cause of the error.
Remarks
Use GetCurrentDirectory
to determine the current working directory for this connection to the server. Do not assume that the remote system has connected you to the root directory.
The pstrDirName
parameter can be either a partially or a fully qualified filename relative to the current directory. A backslash (\) or forward slash (/) can be used as the directory separator for either name. CreateDirectory
translates the directory name separators to the appropriate characters before they are used.
CFtpConnection::GetCurrentDirectory
Call this member function to get the name of the current directory.
BOOL GetCurrentDirectory(CString& strDirName) const;
BOOL GetCurrentDirectory(
LPTSTR pstrDirName,
LPDWORD lpdwLen) const;
Parameters
strDirName
A reference to a string that will receive the name of the directory.
pstrDirName
A pointer to a string that will receive the name of the directory.
lpdwLen
A pointer to a DWORD that contains the following information:
On entry: The size of the buffer referenced by pstrDirName.
On return: The number of characters stored to pstrDirName. If the member function fails and ERROR_INSUFFICIENT_BUFFER is returned, then lpdwLen contains the number of bytes that the application must allocate in order to receive the string.
Return Value
Nonzero if successful; otherwise 0. If the call fails, the Win32 function GetLastError may be called to determine the cause of the error.
Remarks
To get the directory name as a URL instead, call GetCurrentDirectoryAsURL.
The parameters pstrDirName or strDirName can be either partially qualified filenames relative to the current directory or fully qualified. A backslash (\) or forward slash (/) can be used as the directory separator for either name. GetCurrentDirectory
translates the directory name separators to the appropriate characters before they are used.
CFtpConnection::GetCurrentDirectoryAsURL
Call this member function to get the current directory's name as a URL.
BOOL GetCurrentDirectoryAsURL(CString& strDirName) const;
BOOL GetCurrentDirectoryAsURL(
LPTSTR pstrName,
LPDWORD lpdwLen) const;
Parameters
strDirName
A reference to a string that will receive the name of the directory.
pstrDirName
A pointer to a string that will receive the name of the directory.
lpdwLen
A pointer to a DWORD that contains the following information:
On entry: The size of the buffer referenced by pstrDirName.
On return: The number of characters stored to pstrDirName. If the member function fails and ERROR_INSUFFICIENT_BUFFER is returned, then lpdwLen contains the number of bytes that the application must allocate in order to receive the string.
Return Value
Nonzero if successful; otherwise 0. If the call fails, the Win32 function GetLastError may be called to determine the cause of the error.
Remarks
GetCurrentDirectoryAsURL
behaves the same as GetCurrentDirectory
The parameter strDirName can be either partially qualified filenames relative to the current directory or fully qualified. A backslash (\) or forward slash (/) can be used as the directory separator for either name. GetCurrentDirectoryAsURL
translates the directory name separators to the appropriate characters before they are used.
CFtpConnection::GetFile
Call this member function to get a file from an FTP server and store it on the local machine.
BOOL GetFile(
LPCTSTR pstrRemoteFile,
LPCTSTR pstrLocalFile,
BOOL bFailIfExists = TRUE,
DWORD dwAttributes = FILE_ATTRIBUTE_NORMAL,
DWORD dwFlags = FTP_TRANSFER_TYPE_BINARY,
DWORD_PTR dwContext = 1);
Parameters
pstrRemoteFile
A pointer to a null-terminated string containing the name of a file to retrieve from the FTP server.
pstrLocalFile
A pointer to a null-terminated string containing the name of the file to create on the local system.
bFailIfExists
Indicates whether the file name may already be used by an existing file. If the local file name already exists, and this parameter is TRUE, GetFile
fails. Otherwise, GetFile
will erase the existing copy of the file.
dwAttributes
Indicates the attributes of the file. This can be any combination of the following FILE_ATTRIBUTE_* flags.
FILE_ATTRIBUTE_ARCHIVE The file is an archive file. Applications use this attribute to mark files for backup or removal.
FILE_ATTRIBUTE_COMPRESSED The file or directory is compressed. For a file, compression means that all of the data in the file is compressed. For a directory, compression is the default for newly created files and subdirectories.
FILE_ATTRIBUTE_DIRECTORY The file is a directory.
FILE_ATTRIBUTE_NORMAL The file has no other attributes set. This attribute is valid only if used alone. All other file attributes override FILE_ATTRIBUTE_NORMAL:
FILE_ATTRIBUTE_HIDDEN The file is hidden. It is not to be included in an ordinary directory listing.
FILE_ATTRIBUTE_READONLY The file is read only. Applications can read the file but cannot write to it or delete it.
FILE_ATTRIBUTE_SYSTEM The file is part of or is used exclusively by the operating system.
FILE_ATTRIBUTE_TEMPORARY The file is being used for temporary storage. Applications should write to the file only if absolutely necessary. Most of the file's data remains in memory without being flushed to the media because the file will soon be deleted.
dwFlags
Specifies the conditions under which the transfer occurs. This parameter can be any of the dwFlags values described in FtpGetFile in the Windows SDK.
dwContext
The context identifier for the file retrieval. See Remarks for more information about dwContext.
Return Value
Nonzero if successful; otherwise 0. If the call fails, the Win32 function GetLastError may be called to determine the cause of the error.
Remarks
GetFile
is a high-level routine that handles all of the overhead associated with reading a file from an FTP server and storing it locally. Applications that only retrieve file data, or that require close control over the file transfer, should use OpenFile
and CInternetFile::Read instead.
If dwFlags is FILE_TRANSFER_TYPE_ASCII, translation of file data also converts control and formatting characters to Windows equivalents. The default transfer is binary mode, where the file is downloaded in the same format as it is stored on the server.
Both pstrRemoteFile and pstrLocalFile can be either partially qualified filenames relative to the current directory or fully qualified. A backslash (\) or forward slash (/) can be used as the directory separator for either name. GetFile
translates the directory name separators to the appropriate characters before they are used.
Override the dwContext default to set the context identifier to a value of your choosing. The context identifier is associated with this specific operation of the CFtpConnection
object created by its CInternetSession object. The value is returned to CInternetSession::OnStatusCallback to provide status on the operation with which it is identified. See the article Internet First Steps: WinInet for more information about the context identifier.
CFtpConnection::OpenFile
Call this member function to open a file located on an FTP server for reading or writing.
CInternetFile* OpenFile(
LPCTSTR pstrFileName,
DWORD dwAccess = GENERIC_READ,
DWORD dwFlags = FTP_TRANSFER_TYPE_BINARY,
DWORD_PTR dwContext = 1);
Parameters
pstrFileName
A pointer to a string containing the name of the file to be opened.
dwAccess
Determines how the file will be accessed. Can be either GENERIC_READ or GENERIC_WRITE, but not both.
dwFlags
Specifies the conditions under which subsequent transfers occur. This can be any of the following FTP_TRANSFER_* constants:
FTP_TRANSFER_TYPE_ASCII The file transfers using FTP ASCII (Type A) transfer method. Converts control and formatting information to local equivalents.
FTP_TRANSFER_TYPE_BINARY The file transfers data using FTP's Image (Type I) transfer method. The file transfers data exactly as it exists, with no changes. This is the default transfer method.
dwContext
The context identifier for opening the file. See Remarks for more information about dwContext.
Return Value
A pointer to a CInternetFile object.
Remarks
OpenFile
should be used in the following situations:
An application has data that needs to be sent and created as a file on the FTP server, but that data is not in a local file. Once
OpenFile
opens a file, the application uses CInternetFile::Write to send the FTP file data to the server.An application must retrieve a file from the server and place it into application-controlled memory, instead of writing it to disk. The application uses CInternetFile::Read after using
OpenFile
to open the file.An application needs a fine level of control over a file transfer. For example, the application may want to display a progress control indicate the progress of the file transfer status while downloading a file.
After calling OpenFile
and until calling CInternetFile::Close
, the application can only call CInternetFile::Read, CInternetFile::Write, CInternetConnection::Close
, or CFtpFileFind::FindFile. Calls to other FTP functions for the same FTP session will fail and set the error code to FTP_ETRANSFER_IN_PROGRESS.
The pstrFileName parameter can be either a partially qualified filename relative to the current directory or fully qualified. A backslash (\) or forward slash (/) can be used as the directory separator for either name. OpenFile
translates the directory name separators to the appropriate characters before using it.
Override the dwContext default to set the context identifier to a value of your choosing. The context identifier is associated with this specific operation of the CFtpConnection
object created by its CInternetSession object. The value is returned to CInternetSession::OnStatusCallback to provide status on the operation with which it is identified. See the article Internet First Steps: WinInet for more information about the context identifier.
CFtpConnection::PutFile
Call this member function to store a file on an FTP server.
BOOL PutFile(
LPCTSTR pstrLocalFile,
LPCTSTR pstrRemoteFile,
DWORD dwFlags = FTP_TRANSFER_TYPE_BINARY,
DWORD_PTR dwContext = 1);
Parameters
pstrLocalFile
A pointer to a string containing the name of the file to send from the local system.
pstrRemoteFile
A pointer to a string containing the name of the file to create on the FTP server.
dwFlags
Specifies the conditions under which the transfer of the file occurs. Can be any of the FTP_TRANSFER_* constants described in OpenFile.
dwContext
The context identifier for placing the file. See Remarks for more information about dwContext.
Return Value
Nonzero if successful; otherwise 0. If the call fails, the Win32 function GetLastError may be called to determine the cause of the error.
Remarks
PutFile
is a high-level routine that handles all of the operations associated with storing a file on an FTP server. Applications that only send data, or that require closer control over the file transfer, should use OpenFile and CInternetFile::Write.
Override the dwContext
default to set the context identifier to a value of your choosing. The context identifier is associated with this specific operation of the CFtpConnection
object created by its CInternetSession object. The value is returned to CInternetSession::OnStatusCallback to provide status on the operation with which it is identified. See the article Internet First Steps: WinInet for more information about the context identifier.
CFtpConnection::Remove
Call this member function to delete the specified file from the connected server.
BOOL Remove(LPCTSTR pstrFileName);
Parameters
pstrFileName
A pointer to a string containing the file name to remove.
Return Value
Nonzero if successful; otherwise 0. If the call fails, the Win32 function GetLastError may be called to determine the cause of the error.
Remarks
The pstrFileName parameter can be either a partially qualified filename relative to the current directory or fully qualified. A backslash (\) or forward slash (/) can be used as the directory separator for either name. The Remove
function translates the directory name separators to the appropriate characters before they are used.
CFtpConnection::RemoveDirectory
Call this member function to remove the specified directory from the connected server.
BOOL RemoveDirectory(LPCTSTR pstrDirName);
Parameters
pstrDirName
A pointer to a string containing the directory to be removed.
Return Value
Nonzero if successful; otherwise 0. If the call fails, the Win32 function GetLastError may be called to determine the cause of the error.
Remarks
Use GetCurrentDirectory to determine the server's current working directory. Do not assume that the remote system has connected you to the root directory.
The pstrDirName parameter can be either a partially or fully qualified filename relative to the current directory. A backslash (\) or forward slash (/) can be used as the directory separator for either name. RemoveDirectory
translates the directory name separators to the appropriate characters before they are used.
CFtpConnection::Rename
Call this member function to rename the specified file on the connected server.
BOOL Rename(
LPCTSTR pstrExisting,
LPCTSTR pstrNew);
Parameters
pstrExisting
A pointer to a string containing the current name of the file to be renamed.
pstrNew
A pointer to a string containing the file's new name.
Return Value
Nonzero if successful; otherwise 0. If the call fails, the Win32 function GetLastError may be called to determine the cause of the error.
Remarks
The pstrExisting and pstrNew parameters can be either a partially qualified filename relative to the current directory or fully qualified. A backslash (\) or forward slash (/) can be used as the directory separator for either name. Rename
translates the directory name separators to the appropriate characters before they are used.
CFtpConnection::SetCurrentDirectory
Call this member function to change to a different directory on the FTP server.
BOOL SetCurrentDirectory(LPCTSTR pstrDirName);
Parameters
pstrDirName
A pointer to a string containing the name of the directory.
Return Value
Nonzero if successful; otherwise 0. If the call fails, the Win32 function GetLastError may be called to determine the cause of the error.
Remarks
The pstrDirName parameter can be either a partially or fully qualified filename relative to the current directory. A backslash (\) or forward slash (/) can be used as the directory separator for either name. SetCurrentDirectory
translates the directory name separators to the appropriate characters before they are used.
Use GetCurrentDirectory to determine an FTP server's current working directory. Do not assume that the remote system has connected you to the root directory.
See also
CInternetConnection Class
Hierarchy Chart
CInternetConnection Class
CInternetSession Class