您的位置:首页 > 产品设计 > UI/UE

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;
}
}
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: