例子来源于 c#入门经典一书
一个Winform程序,访问微软的ftp地址。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.IO;
namespace FTPClient
{
public partial class FtpClientForm : Form
{
private string serverDirectory;
public FtpClientForm()
{
InitializeComponent();
}
private void buttonOpen_Click(object sender, EventArgs e)
{
Cursor currentCursor = this.Cursor;
FtpWebResponse response = null;
Stream stream = null;
try
{
this.Cursor = Cursors.WaitCursor;
//Create Ftpwebrequest.
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(textServer.Text);
request.Credentials = new NetworkCredential(textUsername.Text, textPassword.Text);
request.Method = WebRequestMethods.Ftp.ListDirectory;
response = (FtpWebResponse)request.GetResponse();
stream = response.GetResponseStream();
FillDirectoryList(stream);
serverDirectory = null;
buttonGetFile.Enabled = true;
buttonOpenDirectory.Enabled = true;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error FTP Client", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
if (response != null)
{
response.Close();
}
if (stream != null)
{
stream.Close();
}
this.Cursor = currentCursor;
}
}
private void FillDirectoryList(Stream stream)
{
StreamReader reader = new StreamReader(stream);
string content = reader.ReadToEnd();
string[] files = content.Split('\n');
listFiles.DataSource = files;
reader.Close();
}
private void buttonOpenDirectory_Click(object sender, EventArgs e)
{
FtpWebResponse response = null;
Stream stream = null;
try
{
string subDirectory = listFiles.SelectedValue.ToString().Trim();
serverDirectory += "/" + subDirectory;
Uri baseUri = new Uri(textServer.Text);
Uri uri = new Uri(baseUri, serverDirectory);
//Create Ftpwebrequest.
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(uri);
request.Credentials = new NetworkCredential(textUsername.Text, textPassword.Text);
request.Method = WebRequestMethods.Ftp.ListDirectory;
response = (FtpWebResponse)request.GetResponse();
stream = response.GetResponseStream();
FillDirectoryList(stream);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error FTP Client", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
if (response != null)
{
response.Close();
}
if (stream != null)
{
stream.Close();
}
}
}
private void buttonGetFile_Click(object sender, EventArgs e)
{
FtpWebResponse response = null;
Stream inStream = null;
Stream outStream = null;
try
{
Uri baseUri = new Uri(textServer.Text);
string filename = listFiles.SelectedValue.ToString().Trim();
string fullFileName = serverDirectory +@"/"+ filename;
Uri uri = new Uri(baseUri, fullFileName);
//Create Ftpwebrequest.
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(uri);
request.Credentials = new NetworkCredential(textUsername.Text, textPassword.Text);
request.Method = WebRequestMethods.Ftp.ListDirectory;
request.UseBinary = true;
response = (FtpWebResponse)request.GetResponse();
inStream = response.GetResponseStream();
saveFileDialog1.FileName = filename;
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
outStream = File.OpenWrite(saveFileDialog1.FileName);
byte[] buffer = new byte[4096];
int size = 0;
while ((size = inStream.Read(buffer, 0, 4096)) > 0)
{
outStream.Write(buffer, 0, size);
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error FTP Client", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
if (response != null)
{
response.Close();
}
if (inStream != null)
{
inStream.Close();
}
if (outStream != null)
{
outStream.Close();
}
}
}
private void listFiles_SelectedIndexChanged(object sender, EventArgs e)
{
buttonGetFile.Enabled = true;
buttonOpenDirectory.Enabled = true;
}
}
}
源代码
http://download.csdn.net/detail/fffanpei/6929129