1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3 %% Purpose: wxFTP documentation
4 %% Author: Guilhem Lavaux, Vadim Zeitlin
8 %% Copyright: (c) wxWidgets team
9 %% License: wxWidgets license
10 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
12 \section{\class{wxFTP
}}\label{wxftp
}
14 wxFTP can be used to establish a connection to an FTP server and perform all the
15 usual operations. Please consult the RFC
959 for more details about the FTP
18 To use a commands which doesn't involve file transfer (i.e. directory oriented
19 commands) you just need to call a corresponding member function or use the
20 generic
\helpref{SendCommand
}{wxftpsendcommand
} method. However to actually
21 transfer files you just get or give a stream to or from this class and the
22 actual data are read or written using the usual stream methods.
24 Example of using wxFTP for file downloading:
29 // if you don't use these lines anonymous login will be used
31 ftp.SetPassword("password");
33 if ( !ftp.Connect("ftp.wxwindows.org") )
35 wxLogError("Couldn't connect");
40 wxInputStream *in = ftp.GetInputStream("wxWidgets-
4.2.0.tar.gz");
43 wxLogError("Coudln't get file");
47 size_t size = in->GetSize();
48 char *data = new char
[size
];
49 if ( !in->Read(data, size) )
51 wxLogError("Read error");
55 // file data is in the buffer
64 To upload a file you would do (assuming the connection to the server was opened
68 wxOutputStream *out = ftp.GetOutputStream("filename");
71 out->Write(...); // your data
78 wxFTP defines constants corresponding to the two supported transfer modes:
88 \wxheading{Derived from
}
90 \helpref{wxProtocol
}{wxprotocol
}
92 \wxheading{Include files
}
98 \helpref{wxSocketBase
}{wxsocketbase
}
100 % ----------------------------------------------------------------------------
102 % ----------------------------------------------------------------------------
104 \latexignore{\rtfignore{\wxheading{Members
}}}
107 \membersection{wxFTP::wxFTP
}\label{wxftpctor
}
109 \func{}{wxFTP
}{\void}
114 \membersection{wxFTP::
\destruct{wxFTP
}}\label{wxftpdtor
}
116 \func{}{\destruct{wxFTP
}}{\void}
118 Destructor will close the connection if connected.
121 \membersection{wxFTP::Abort
}\label{wxftpabort
}
123 \func{bool
}{Abort
}{\void}
125 Aborts the download currently in process, returns
{\tt true
} if ok,
{\tt false
}
129 \membersection{wxFTP::CheckCommand
}\label{wxftpcheckcommand
}
131 \func{bool
}{CheckCommand
}{\param{const wxString\&
}{ command
},
\param{char
}{ret
}}
133 Send the specified
{\it command
} to the FTP server.
{\it ret
} specifies
136 \wxheading{Return value
}
138 true if the command has been sent successfully, else false.
141 \membersection{wxFTP::SendCommand
}\label{wxftpsendcommand
}
143 \func{char
}{SendCommand
}{\param{const wxString\&
}{ command
}}
145 Send the specified
{\it command
} to the FTP server and return the first
146 character of the return code.
149 \membersection{wxFTP::GetLastResult
}\label{wxftpgetlastresult
}
151 \func{const wxString\&
}{GetLastResult
}{\void}
153 Returns the last command result, i.e. the full server reply for the last
156 % ----------------------------------------------------------------------------
159 \membersection{wxFTP::ChDir
}\label{wxftpchdir
}
161 \func{bool
}{ChDir
}{\param{const wxString\&
}{ dir
}}
163 Change the current FTP working directory.
164 Returns true if successful.
167 \membersection{wxFTP::MkDir
}\label{wxftpmkdir
}
169 \func{bool
}{MkDir
}{\param{const wxString\&
}{ dir
}}
171 Create the specified directory in the current FTP working directory.
172 Returns true if successful.
175 \membersection{wxFTP::RmDir
}\label{wxftprmdir
}
177 \func{bool
}{RmDir
}{\param{const wxString\&
}{ dir
}}
179 Remove the specified directory from the current FTP working directory.
180 Returns true if successful.
183 \membersection{wxFTP::Pwd
}\label{wxftppwd
}
185 \func{wxString
}{Pwd
}{\void}
187 Returns the current FTP working directory.
189 % ----------------------------------------------------------------------------
192 \membersection{wxFTP::Rename
}\label{wxftprename
}
194 \func{bool
}{Rename
}{\param{const wxString\&
}{ src
},
\param{const wxString\&
}{ dst
}}
196 Rename the specified
{\it src
} element to
{\it dst
}. Returns true if successful.
198 % ----------------------------------------------------------------------------
201 \membersection{wxFTP::RmFile
}\label{wxftprmfile
}
203 \func{bool
}{RmFile
}{\param{const wxString\&
}{ path
}}
205 Delete the file specified by
{\it path
}. Returns true if successful.
207 % ----------------------------------------------------------------------------
210 \membersection{wxFTP::SetAscii
}\label{wxftpsetascii
}
212 \func{bool
}{SetAscii
}{\void}
214 Sets the transfer mode to ASCII. It will be used for the next transfer.
217 \membersection{wxFTP::SetBinary
}\label{wxftpsetbinary
}
219 \func{bool
}{SetBinary
}{\void}
221 Sets the transfer mode to binary (IMAGE). It will be used for the next transfer.
224 \membersection{wxFTP::SetPassive
}\label{wxftpsetpassive
}
226 \func{void
}{SetPassive
}{\param{bool
}{pasv
}}
228 If
\arg{pasv
} is
\true, passive connection to the FTP server is used. This is
229 the default as it works with practically all firewalls. If the server doesn't
230 support passive move, you may call this function with
\false argument to use
234 \membersection{wxFTP::SetTransferMode
}\label{wxftpsettransfermode
}
236 \func{bool
}{SetTransferMode
}{\param{TransferMode
}{mode
}}
238 Sets the transfer mode to the specified one. It will be used for the next
241 If this function is never called, binary transfer mode is used by default.
243 % ----------------------------------------------------------------------------
246 \membersection{wxFTP::SetUser
}\label{wxftpsetuser
}
248 \func{void
}{SetUser
}{\param{const wxString\&
}{ user
}}
250 Sets the user name to be sent to the FTP server to be allowed to log in.
252 \wxheading{Default value
}
254 The default value of the user name is "anonymous".
258 This parameter can be included in a URL if you want to use the URL manager.
259 For example, you can use: "ftp://a
\_user:a
\_password@a.host:service/a
\_directory/a
\_file"
260 to specify a user and a password.
263 \membersection{wxFTP::SetPassword
}\label{wxftpsetpassword
}
265 \func{void
}{SetPassword
}{\param{const wxString\&
}{ passwd
}}
267 Sets the password to be sent to the FTP server to be allowed to log in.
269 \wxheading{Default value
}
271 The default value of the user name is your email address. For example, it could
272 be "username@userhost.domain". This password is built by getting the current
273 user name and the host name of the local machine from the system.
277 This parameter can be included in a URL if you want to use the URL manager.
278 For example, you can use: "ftp://a
\_user:a
\_password@a.host:service/a
\_directory/a
\_file"
279 to specify a user and a password.
281 % ----------------------------------------------------------------------------
284 \membersection{wxFTP::FileExists
}\label{wxftpfileexists
}
286 \func{bool
}{FileExists
}{\param{const wxString\&
}{ filename
}}
288 Returns
{\tt true
} if the given remote file exists,
{\tt false
} otherwise.
291 \membersection{wxFTP::GetFileSize
}\label{wxftpgetfilesize
}
293 \func{int
}{GetFileSize
}{\param{const wxString\&
}{ filename
}}
295 Returns the file size in bytes or $-
1$ if the file doesn't exist or the size
296 couldn't be determined. Notice that this size can be approximative size only
297 and shouldn't be used for allocating the buffer in which the remote file is
301 \membersection{wxFTP::GetDirList
}\label{wxftpgetdirlist
}
303 \func{bool
}{GetDirList
}{\param{wxArrayString\&
}{files
},
\param{const wxString\&
}{ wildcard = ""
}}
305 The GetList function is quite low-level. It returns the list of the files in
306 the current directory. The list can be filtered using the
{\it wildcard
} string.
307 If
{\it wildcard
} is empty (default), it will return all files in directory.
309 The form of the list can change from one peer system to another. For example,
310 for a UNIX peer system, it will look like this:
313 -r--r--r--
1 guilhem lavaux
12738 Jan
16 20:
17 cmndata.cpp
314 -r--r--r--
1 guilhem lavaux
10866 Jan
24 16:
41 config.cpp
315 -rw-rw-rw-
1 guilhem lavaux
29967 Dec
21 19:
17 cwlex_yy.c
316 -rw-rw-rw-
1 guilhem lavaux
14342 Jan
22 19:
51 cwy_tab.c
317 -r--r--r--
1 guilhem lavaux
13890 Jan
29 19:
18 date.cpp
318 -r--r--r--
1 guilhem lavaux
3989 Feb
8 19:
18 datstrm.cpp
321 But on Windows system, it will look like this:
324 winamp~
1 exe
520196 02-
25-
1999 19:
28 winamp204.exe
325 1 file(s)
520 196 bytes
328 Return value: true if the file list was successfully retrieved, false
333 \helpref{GetFilesList
}{wxftpgetfileslist
}
336 \membersection{wxFTP::GetFilesList
}\label{wxftpgetfileslist
}
338 \func{bool
}{GetFilesList
}{\param{wxArrayString\&
}{files
},
\param{const wxString\&
}{ wildcard = ""
}}
340 This function returns the computer-parsable list of the files in the current
341 directory (optionally only of the files matching the
{\it wildcard
}, all files
342 by default). This list always has the same format and contains one full
343 (including the directory path) file name per line.
345 Return value: true if the file list was successfully retrieved, false
348 % ----------------------------------------------------------------------------
351 \membersection{wxFTP::GetOutputStream
}\label{wxftpgetoutputstream
}
353 \func{wxOutputStream *
}{GetOutputStream
}{\param{const wxString\&
}{ file
}}
355 Initializes an output stream to the specified
{\it file
}. The returned
356 stream has all but the seek functionality of wxStreams. When the user finishes
357 writing data, he has to delete the stream to close it.
359 \wxheading{Return value
}
361 An initialized write-only stream.
365 \helpref{wxOutputStream
}{wxoutputstream
}
367 % ----------------------------------------------------------------------------
370 \membersection{wxFTP::GetInputStream
}\label{wxftpgetinputstream
}
372 \func{wxInputStream *
}{GetInputStream
}{\param{const wxString\&
}{ path
}}
374 Creates a new input stream on the the specified path. You can use all but the seek
375 functionality of wxStream. Seek isn't available on all streams. For example,
376 http or ftp streams do not deal with it. Other functions like Tell
377 are not available for this sort of stream, at present.
378 You will be notified when the EOF is reached by an error.
380 \wxheading{Return value
}
382 Returns NULL if an error occurred (it could be a network failure or the fact
383 that the file doesn't exist).
385 Returns the initialized stream. You will have to delete it yourself when you
386 don't need it anymore. The destructor closes the DATA stream connection but
387 will leave the COMMAND stream connection opened. It means that you can still
388 send new commands without reconnecting.
390 \wxheading{Example of a standalone connection (without wxURL)
}
394 wxInputStream *in_stream;
397 ftp.Connect("a.host.domain");
398 ftp.ChDir("a_directory");
399 in_stream = ftp.GetInputStream("a_file_to_get");
401 data = new char
[in_stream->GetSize()
];
403 in_stream->Read(data, in_stream->GetSize());
404 if (in_stream->LastError() != wxStream_NOERROR)
{
408 delete in_stream; /* Close the DATA connection */
410 ftp.Close(); /* Close the COMMAND connection */
415 \helpref{wxInputStream
}{wxinputstream
}