C#: WebRequest和WebResponse下载文件示例

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using System.Net; using System.IO; using Microsoft.Win32; namespace FtpClient { /// <summary> /// Interaction logic for Window1.xaml /// </summary> public partial class FtpClientwindow : Window { private string serverDirectory; public FtpClientwindow() { InitializeComponent(); } private void FillDirectoryList(Stream stream) { StreamReader reader = new StreamReader(stream); string content = reader.ReadToEnd(); string[] files = content.Split('/n'); listBoxFiles.DataContext = files; reader.Close(); } private void buttonOpen_Click(object sender, RoutedEventArgs e) { Cursor currentCusor = this.Cursor; FtpWebResponse response = null; Stream stream = null; try { this.Cursor = Cursors.Wait; FtpWebRequest request = (FtpWebRequest)WebRequest.Create(textBoxServer.Text); request.Credentials = new NetworkCredential(textBoxUserName.Text, passwordBox.Password); request.Method = WebRequestMethods.Ftp.ListDirectory; response = (FtpWebResponse)request.GetResponse(); stream = response.GetResponseStream(); FillDirectoryList(stream); serverDirectory = null; buttonOpenDirectory.IsEnabled = false; buttonGetFile.IsEnabled = false; } catch (WebException ex) { MessageBox.Show(ex.Message, "Error FTP Client", MessageBoxButton.OK, MessageBoxImage.Error); } catch(IOException ex) { MessageBox.Show(ex.Message, "Error FTP Client", MessageBoxButton.OK, MessageBoxImage.Error); } finally { if (response != null) { response.Close(); } if (stream != null) { stream.Close(); } this.Cursor = currentCusor; } } private void buttonOpenDirectory_Click(object sender, RoutedEventArgs e) { Cursor currentCursor = this.Cursor; FtpWebResponse response = null; Stream stream = null; try { this.Cursor = Cursors.Wait; string subDirectory = listBoxFiles.SelectedValue.ToString().Trim(); if (serverDirectory != null) { serverDirectory += @"/" + subDirectory; } else { serverDirectory = subDirectory; } Uri baseUri = new Uri(textBoxServer.Text); Uri uri = new Uri(baseUri, serverDirectory); FtpWebRequest request = (FtpWebRequest)WebRequest.Create(uri); request.Credentials = new NetworkCredential(textBoxUserName.Text, passwordBox.Password); request.Method = WebRequestMethods.Ftp.ListDirectory; response = (FtpWebResponse)request.GetResponse(); stream = response.GetResponseStream(); FillDirectoryList(stream); } catch (Exception ex) { MessageBox.Show(ex.Message, "Error FTP Client", MessageBoxButton.OK, MessageBoxImage.Error); } finally { if (response != null) { response.Close(); } if (stream != null) { stream.Close(); } this.Cursor = currentCursor; } } private void buttonGetFile_Click(object sender, RoutedEventArgs e) { Cursor currentCursor = this.Cursor; FtpWebResponse response = null; Stream inStream = null; Stream outStream = null; try { this.Cursor = Cursors.Wait; string filename = listBoxFiles.SelectedValue.ToString().Trim(); string fullFilename = serverDirectory + @"/" + filename; Uri baseUri = new Uri(textBoxServer.Text); Uri uri = new Uri(baseUri, fullFilename); FtpWebRequest request = (FtpWebRequest)WebRequest.Create(uri); request.Credentials = new NetworkCredential(textBoxUserName.Text, passwordBox.Password); request.Method = WebRequestMethods.Ftp.DownloadFile; request.UseBinary = checkBoxBinary.IsChecked??false; response = (FtpWebResponse)request.GetResponse(); inStream = response.GetResponseStream(); SaveFileDialog saveFileDialog = new SaveFileDialog(); if (saveFileDialog.ShowDialog() == true) { outStream = File.OpenWrite(saveFileDialog.FileName); byte[] buffer = new byte[8192]; int size = 0; while ((size = inStream.Read(buffer, 0, 8192)) > 0) { outStream.Write(buffer, 0, size); } } } catch (WebException ex) { MessageBox.Show(ex.Message, "Error FTP Client", MessageBoxButton.OK, MessageBoxImage.Error); } finally { if (inStream != null) { inStream.Close(); } if (outStream != null) { outStream.Close(); } if (response != null) { response.Close(); } this.Cursor = currentCursor; } } private void listBoxFiles_SelectionChanged(object sender, SelectionChangedEventArgs e) { buttonGetFile.IsEnabled = true; buttonOpenDirectory.IsEnabled = true; } } }

 

 

你可能感兴趣的:(object,Stream,String,C#,null,buffer)