X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/40b480c35de6bb004aa676e55f697b833156e402..9f057af5efcd64383486a6d56b8a4703a0118abd:/docs/latex/wx/ftp.tex?ds=sidebyside diff --git a/docs/latex/wx/ftp.tex b/docs/latex/wx/ftp.tex index 2b8b6c5ec6..67925829ef 100644 --- a/docs/latex/wx/ftp.tex +++ b/docs/latex/wx/ftp.tex @@ -1,12 +1,97 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Name: ftp.tex +%% Purpose: wxFTP documentation +%% Author: Guilhem Lavaux, Vadim Zeitlin +%% Modified by: +%% Created: ~1997 +%% RCS-ID: $Id$ +%% Copyright: (c) wxWidgets team +%% License: wxWindows license +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \section{\class{wxFTP}}\label{wxftp} +wxFTP can be used to establish a connection to an FTP server and perform all the +usual operations. Please consult the RFC 959 for more details about the FTP +protocol. + +To use a commands which doesn't involve file transfer (i.e. directory oriented +commands) you just need to call a corresponding member function or use the +generic \helpref{SendCommand}{wxftpsendcommand} method. However to actually +transfer files you just get or give a stream to or from this class and the +actual data are read or written using the usual stream methods. + +Example of using wxFTP for file downloading: + +\begin{verbatim} + wxFTP ftp; + + // if you don't use these lines anonymous login will be used + ftp.SetUser("user"); + ftp.SetPassword("password"); + + if ( !ftp.Connect("ftp.wxwindows.org") ) + { + wxLogError("Couldn't connect"); + return; + } + + ftp.ChDir("/pub"); + wxInputStream *in = ftp.GetInputStream("wxWidgets-4.2.0.tar.gz"); + if ( !in ) + { + wxLogError("Coudln't get file"); + } + else + { + size_t size = in->GetSize(); + char *data = new char[size]; + if ( !in->Read(data, size) ) + { + wxLogError("Read error"); + } + else + { + // file data is in the buffer + ... + } + + delete [] data; + delete in; + } +\end{verbatim} + +To upload a file you would do (assuming the connection to the server was opened +successfully): + +\begin{verbatim} + wxOutputStream *out = ftp.GetOutputStream("filename"); + if ( out ) + { + out->Write(...); // your data + delete out; + } +\end{verbatim} + +\wxheading{Constants} + +wxFTP defines constants corresponding to the two supported transfer modes: + +\begin{verbatim} +enum TransferMode +{ + ASCII, + BINARY +}; +\end{verbatim} + \wxheading{Derived from} \helpref{wxProtocol}{wxprotocol} \wxheading{Include files} - + \wxheading{See also} @@ -16,51 +101,86 @@ % Members % ---------------------------------------------------------------------------- -\latexignore{\rtfignore{\membersection{Members}}} +\latexignore{\rtfignore{\wxheading{Members}}} + + +\membersection{wxFTP::wxFTP}\label{wxftpctor} + +\func{}{wxFTP}{\void} + +Default constructor. + + +\membersection{wxFTP::\destruct{wxFTP}}\label{wxftpdtor} + +\func{}{\destruct{wxFTP}}{\void} + +Destructor will close the connection if connected. + + +\membersection{wxFTP::Abort}\label{wxftpabort} + +\func{bool}{Abort}{\void} + +Aborts the download currently in process, returns \true if ok, \false +if an error occurred. -\membersection{wxFTP::SendCommand} -\func{bool}{SendCommand}{\param{const wxString\&}{ command}, \param{char }{ret}} +\membersection{wxFTP::CheckCommand}\label{wxftpcheckcommand} -Send the specified \it{command} to the FTP server. \it{ret} specifies +\func{bool}{CheckCommand}{\param{const wxString\&}{ command}, \param{char }{ret}} + +Send the specified {\it command} to the FTP server. {\it ret} specifies the expected result. \wxheading{Return value} -TRUE, if the command has been sent successfully, else FALSE. +true if the command has been sent successfully, else false. -% ---------------------------------------------------------------------------- -\membersection{wxFTP::GetLastResult} +\membersection{wxFTP::SendCommand}\label{wxftpsendcommand} + +\func{char}{SendCommand}{\param{const wxString\&}{ command}} + +Send the specified {\it command} to the FTP server and return the first +character of the return code. + + +\membersection{wxFTP::GetLastResult}\label{wxftpgetlastresult} \func{const wxString\&}{GetLastResult}{\void} -Returns the last command result. +Returns the last command result, i.e. the full server reply for the last +command. % ---------------------------------------------------------------------------- -\membersection{wxFTP::ChDir} + +\membersection{wxFTP::ChDir}\label{wxftpchdir} \func{bool}{ChDir}{\param{const wxString\&}{ dir}} Change the current FTP working directory. -Returns TRUE if successful. +Returns true if successful. -\membersection{wxFTP::MkDir} + +\membersection{wxFTP::MkDir}\label{wxftpmkdir} \func{bool}{MkDir}{\param{const wxString\&}{ dir}} Create the specified directory in the current FTP working directory. -Returns TRUE if successful. +Returns true if successful. + -\membersection{wxFTP::RmDir} +\membersection{wxFTP::RmDir}\label{wxftprmdir} \func{bool}{RmDir}{\param{const wxString\&}{ dir}} Remove the specified directory from the current FTP working directory. -Returns TRUE if successful. +Returns true if successful. -\membersection{wxFTP::Pwd} + +\membersection{wxFTP::Pwd}\label{wxftppwd} \func{wxString}{Pwd}{\void} @@ -68,27 +188,171 @@ Returns the current FTP working directory. % ---------------------------------------------------------------------------- -\membersection{wxFTP::Rename} + +\membersection{wxFTP::Rename}\label{wxftprename} \func{bool}{Rename}{\param{const wxString\&}{ src}, \param{const wxString\&}{ dst}} -Rename the specified \it{src} element to \it{dst}. Returns TRUE if successful. +Rename the specified {\it src} element to {\it dst}. Returns true if successful. % ---------------------------------------------------------------------------- -\membersection{wxFTP::RmFile} + +\membersection{wxFTP::RmFile}\label{wxftprmfile} \func{bool}{RmFile}{\param{const wxString\&}{ path}} -Delete the file specified by \it{path}. Returns TRUE if successful. +Delete the file specified by {\it path}. Returns true if successful. + +% ---------------------------------------------------------------------------- + + +\membersection{wxFTP::SetAscii}\label{wxftpsetascii} + +\func{bool}{SetAscii}{\void} + +Sets the transfer mode to ASCII. It will be used for the next transfer. + + +\membersection{wxFTP::SetBinary}\label{wxftpsetbinary} + +\func{bool}{SetBinary}{\void} + +Sets the transfer mode to binary (IMAGE). It will be used for the next transfer. + + +\membersection{wxFTP::SetPassive}\label{wxftpsetpassive} + +\func{void}{SetPassive}{\param{bool }{pasv}} + +If \arg{pasv} is \true, passive connection to the FTP server is used. This is +the default as it works with practically all firewalls. If the server doesn't +support passive move, you may call this function with \false argument to use +active connection. + + +\membersection{wxFTP::SetTransferMode}\label{wxftpsettransfermode} + +\func{bool}{SetTransferMode}{\param{TransferMode }{mode}} + +Sets the transfer mode to the specified one. It will be used for the next +transfer. + +If this function is never called, binary transfer mode is used by default. % ---------------------------------------------------------------------------- -\membersection{wxFTP::GetOutputStream} + +\membersection{wxFTP::SetUser}\label{wxftpsetuser} + +\func{void}{SetUser}{\param{const wxString\&}{ user}} + +Sets the user name to be sent to the FTP server to be allowed to log in. + +\wxheading{Default value} + +The default value of the user name is "anonymous". + +\wxheading{Remark} + +This parameter can be included in a URL if you want to use the URL manager. +For example, you can use: "ftp://a\_user:a\_password@a.host:service/a\_directory/a\_file" +to specify a user and a password. + + +\membersection{wxFTP::SetPassword}\label{wxftpsetpassword} + +\func{void}{SetPassword}{\param{const wxString\&}{ passwd}} + +Sets the password to be sent to the FTP server to be allowed to log in. + +\wxheading{Default value} + +The default value of the user name is your email address. For example, it could +be "username@userhost.domain". This password is built by getting the current +user name and the host name of the local machine from the system. + +\wxheading{Remark} + +This parameter can be included in a URL if you want to use the URL manager. +For example, you can use: "ftp://a\_user:a\_password@a.host:service/a\_directory/a\_file" +to specify a user and a password. + +% ---------------------------------------------------------------------------- + + +\membersection{wxFTP::FileExists}\label{wxftpfileexists} + +\func{bool}{FileExists}{\param{const wxString\&}{ filename}} + +Returns \true if the given remote file exists, \false otherwise. + + +\membersection{wxFTP::GetFileSize}\label{wxftpgetfilesize} + +\func{int}{GetFileSize}{\param{const wxString\&}{ filename}} + +Returns the file size in bytes or $-1$ if the file doesn't exist or the size +couldn't be determined. Notice that this size can be approximative size only +and shouldn't be used for allocating the buffer in which the remote file is +copied, for example. + + +\membersection{wxFTP::GetDirList}\label{wxftpgetdirlist} + +\func{bool}{GetDirList}{\param{wxArrayString\& }{files}, \param{const wxString\&}{ wildcard = ""}} + +The GetList function is quite low-level. It returns the list of the files in +the current directory. The list can be filtered using the {\it wildcard} string. +If {\it wildcard} is empty (default), it will return all files in directory. + +The form of the list can change from one peer system to another. For example, +for a UNIX peer system, it will look like this: + +\begin{verbatim} +-r--r--r-- 1 guilhem lavaux 12738 Jan 16 20:17 cmndata.cpp +-r--r--r-- 1 guilhem lavaux 10866 Jan 24 16:41 config.cpp +-rw-rw-rw- 1 guilhem lavaux 29967 Dec 21 19:17 cwlex_yy.c +-rw-rw-rw- 1 guilhem lavaux 14342 Jan 22 19:51 cwy_tab.c +-r--r--r-- 1 guilhem lavaux 13890 Jan 29 19:18 date.cpp +-r--r--r-- 1 guilhem lavaux 3989 Feb 8 19:18 datstrm.cpp +\end{verbatim} + +But on Windows system, it will look like this: + +\begin{verbatim} +winamp~1 exe 520196 02-25-1999 19:28 winamp204.exe + 1 file(s) 520 196 bytes +\end{verbatim} + +Return value: true if the file list was successfully retrieved, false +otherwise. + +\wxheading{See also} + +\helpref{GetFilesList}{wxftpgetfileslist} + + +\membersection{wxFTP::GetFilesList}\label{wxftpgetfileslist} + +\func{bool}{GetFilesList}{\param{wxArrayString\& }{files}, \param{const wxString\&}{ wildcard = ""}} + +This function returns the computer-parsable list of the files in the current +directory (optionally only of the files matching the {\it wildcard}, all files +by default). This list always has the same format and contains one full +(including the directory path) file name per line. + +Return value: true if the file list was successfully retrieved, false +otherwise. + +% ---------------------------------------------------------------------------- + + +\membersection{wxFTP::GetOutputStream}\label{wxftpgetoutputstream} \func{wxOutputStream *}{GetOutputStream}{\param{const wxString\&}{ file}} -Initializes an output stream to the specified \it{file}. The returned +Initializes an output stream to the specified {\it file}. The returned stream has all but the seek functionality of wxStreams. When the user finishes writing data, he has to delete the stream to close it. @@ -100,3 +364,53 @@ An initialized write-only stream. \helpref{wxOutputStream}{wxoutputstream} +% ---------------------------------------------------------------------------- + + +\membersection{wxFTP::GetInputStream}\label{wxftpgetinputstream} + +\func{wxInputStream *}{GetInputStream}{\param{const wxString\&}{ path}} + +Creates a new input stream on the specified path. You can use all but the seek +functionality of wxStream. Seek isn't available on all streams. For example, +HTTP or FTP streams do not deal with it. Other functions like Tell +are not available for this sort of stream, at present. +You will be notified when the EOF is reached by an error. + +\wxheading{Return value} + +Returns NULL if an error occurred (it could be a network failure or the fact +that the file doesn't exist). + +Returns the initialized stream. You will have to delete it yourself when you +don't need it anymore. The destructor closes the DATA stream connection but +will leave the COMMAND stream connection opened. It means that you can still +send new commands without reconnecting. + +\wxheading{Example of a standalone connection (without wxURL)} + +\begin{verbatim} + wxFTP ftp; + wxInputStream *in_stream; + char *data; + + ftp.Connect("a.host.domain"); + ftp.ChDir("a_directory"); + in_stream = ftp.GetInputStream("a_file_to_get"); + + data = new char[in_stream->GetSize()]; + + in_stream->Read(data, in_stream->GetSize()); + if (in_stream->LastError() != wxStream_NOERROR) { + // Do something. + } + + delete in_stream; /* Close the DATA connection */ + + ftp.Close(); /* Close the COMMAND connection */ +\end{verbatim} + +\wxheading{See also} + +\helpref{wxInputStream}{wxinputstream} +