private string[] GetDirectoryListing(string path) {
try {
//---get the directory listing---
FtpWebResponse FTPResp = PerformWebRequest(
path, WebRequestMethod.ListDirectoryDetails);
//---get the stream containing the directory listing---
Stream ftpRespStream = FTPResp.GetResponseStream();
StreamReader reader =
new StreamReader(ftpRespStream, System.Text.Encoding.UTF8);
//---obtain the result as a string array---
string[] result = reader.ReadToEnd().Split(
Environment.NewLine.ToCharArray(),
StringSplitOptions.RemoveEmptyEntries);
FTPResp.Close();
return result;
} catch (Exception ex) {
MessageBox.Show(ex.ToString());
return null;
}
}
To view the directory listing of an FTP server, you make use of the PerformWebRequest()helper function, which is defined as follows:
private FtpWebResponse PerformWebRequest(
string path, WebRequestMethod method) {
//---display the hour glass cursor---
Cursor.Current = Cursors.WaitCursor;
FtpWebRequest ftpReq = (FtpWebRequest)WebRequest.Create(path);
switch (method) {
case WebRequestMethod.DeleteFile:
ftpReq.Method = WebRequestMethods.Ftp.DeleteFile;
break;
case WebRequestMethod.DownloadFile:
ftpReq.Method = WebRequestMethods.Ftp.DownloadFile;
break;
case WebRequestMethod.ListDirectoryDetails:
ftpReq.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
break;
case WebRequestMethod.MakeDirectory:
ftpReq.Method = WebRequestMethods.Ftp.MakeDirectory;
break;
case WebRequestMethod.RemoveDirectory:
ftpReq.Method = WebRequestMethods.Ftp.RemoveDirectory;
break;
}
ftpReq.Credentials = new NetworkCredential(
Properties.Settings.Default.UserName,
Properties.Settings.Default.Password);
FtpWebResponse ftpResp = (FtpWebResponse)ftpReq.GetResponse();
//---change back the cursor---
Cursor.Current = Cursors.Default;
return ftpResp;
}
The PerformWebRequest()function contains two parameters:
□ A path representing the full FTP path
□ A WebRequestMethodenumeration representing the type of request you are performing
In the PerformWebRequest()function, you perform the following:
□ Create an instance of the FtpWebRequestclass, using the WebRequestclass's Create()method. Create()takes in a URI parameter (containing the full FTP path).
□ Set the command to be sent to the FTP server, using the Methodproperty of the FtpWebRequestobject.
□ Specify the login credential to the FTP server, using the NetWorkCredentialclass.
□ Obtain the response from the FTP server, using the GetResponse()method from the FtpWebRequestclass.
The PerformWebRequest()function returns a FtpWebResponseobject.
Back in the GetDirectoryListing()function, after the call to PerformWebRequest()returns, you retrieve the stream containing the response data sent by the FTP server, using the GetResponseStream()method from the FtpWebResponseclass. You then use a StreamReaderobject to read the directory listing:
//---Get the file/dir listings and return them as a string array---
private string[] GetDirectoryListing(string path) {
try {
//---get the directory listing---
FtpWebResponse FTPResp = PerformWebRequest(
path, WebRequestMethod.ListDirectoryDetails);
//---get the stream containing the directory listing---
Stream ftpRespStream = FTPResp.GetResponseStream();
StreamReader reader =
new StreamReader(ftpRespStream, System.Text.Encoding.UTF8);
//---obtain the result as a string array---
string[] result = reader.ReadToEnd().Split(
Environment.NewLine.ToCharArray(),
StringSplitOptions.RemoveEmptyEntries);
FTPResp.Close();
return result;
} catch (Exception ex) {
MessageBox.Show(ex.ToString());
return null;
}
}
The directory listing is split into a string array. The directory listings are separated by newline characters. If your FTP server is configured with an MS-DOS directory listing style (see Figure 16-11), the directory listing will look something like this:
12-11-06 10:54PM 2074750 DSC00098.JPG
12-11-06 10:54PM 2109227 DSC00099.JPG
12-11-06 10:49PM
Читать дальше