C#: WebRequest和WebResponse下载文件示例
2009-10-08 19:58
429 查看
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; } } }
相关文章推荐
- C#中网页文件下载——HttpWebRequest与HttpWebResponse的使用方法
- C#使用HttpWebRequest和HttpWebResponse上传文件示例
- C#使用HttpWebRequest和HttpWebResponse上传文件示例
- C#使用HttpWebRequest和HttpWebResponse上传文件示例
- c# 使用FtpWebRequest,FtpWebResponse ,Stream 实现获取文件列表及下载
- NET(C#):使用HttpWebRequest头中的Range下载文件片段
- NET(C#):使用HttpWebRequest头中的Range下载文件片段
- .Net 使用HttpWebRequest 和 HttpWebResponse 下载文件
- Unity3d C# HttpWebRequest 异步下载文件
- 使用HttpWebRequest以及HttpWebResponse下载Http远程文件[转]
- C# HttpWebRequest可断点上传,下载文件;SOCKET多线程多管道可断点传送大文件
- 【JavaWeb-6】HttpServletResponse的字符字节输出流、编码、文件下载、Captcha图片与HttpServletRequest获取request数据表单非表单数据、重定向与转发
- NET(C#):使用HttpWebRequest头中的Range下载文件片段
- 下载文件和将文件转换为数据流下载的示例C#
- WebRequest之HttpWebRequest实现服务器上文件的下载(一)
- 黄聪:C#模拟网站页面POST数据提交表单(二)--HttpWebRequest以及HttpWebResponse (转)
- 使用HttpWebRequest下载远程文件部分网站出现异常
- C#实现文件上传下载Excel文档示例代码
- C#模拟POST提交表单(二)--HttpWebRequest以及HttpWebResponse
- C#模拟POST提交表单(二)--HttpWebRequest以及HttpWebResponse