代码语言:javascript复制
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Windows.Forms;
using System.Net;
using System.IO;
class FtpClientForm : Form {
public FtpClientForm() {
InitializeComponent();
}
private string serverDirectory;
private void OnOpen(object sender, EventArgs e) {
Cursor currentCursor = this.Cursor;
FtpWebResponse response = null;
Stream stream = null;
this.Cursor = Cursors.WaitCursor;
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;
buttonOpenDirectory.Enabled = false;
buttonGetFile.Enabled = false;
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 OnOpenDirectory(object sender, EventArgs e) {
FtpWebResponse response = null;
Stream stream = null;
string subDirectory = listFiles.SelectedValue.ToString().Trim();
serverDirectory = @"/" subDirectory;
Uri baseUri = new Uri(textServer.Text);
Uri uri = new Uri(baseUri, serverDirectory);
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);
if (response != null)
response.Close();
if (stream != null)
stream.Close();
}
private void OnDownloadFile(object sender, EventArgs e) {
FtpWebResponse response = null;
Stream inStream = null;
Stream outStream = null;
Uri baseUri = new Uri(textServer.Text);
string filename = listFiles.SelectedValue.ToString().Trim();
string fullFilename = serverDirectory @"/" filename;
Uri uri = new Uri(baseUri, fullFilename);
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(uri);
request.Credentials = new NetworkCredential(textUsername.Text,textPassword.Text);
request.Method = WebRequestMethods.Ftp.DownloadFile;
request.UseBinary = checkBoxBinary.Checked;
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);
}
}
if (inStream != null)
inStream.Close();
if (outStream != null)
outStream.Close();
if (response != null)
response.Close();
}
private void OnFileSelection(object sender, EventArgs e) {
this.buttonGetFile.Enabled = true;
this.buttonOpenDirectory.Enabled = true;
}
private void InitializeComponent() {
this.label1 = new System.Windows.Forms.Label();
this.textServer = new System.Windows.Forms.TextBox();
this.buttonOpen = new System.Windows.Forms.Button();
this.statusStrip1 = new System.Windows.Forms.StatusStrip();
this.listFiles = new System.Windows.Forms.ListBox();
this.buttonOpenDirectory = new System.Windows.Forms.Button();
this.buttonGetFile = new System.Windows.Forms.Button();
this.saveFileDialog1 = new System.Windows.Forms.SaveFileDialog();
this.checkBoxBinary = new System.Windows.Forms.CheckBox();
this.label2 = new System.Windows.Forms.Label();
this.label3 = new System.Windows.Forms.Label();
this.textUsername = new System.Windows.Forms.TextBox();
this.textPassword = new System.Windows.Forms.TextBox();
this.SuspendLayout();
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(28, 31);
this.label1.Size = new System.Drawing.Size(37, 13);
this.label1.Text = "Server:";
this.textServer.Location = new System.Drawing.Point(109, 31);
this.textServer.Size = new System.Drawing.Size(146, 20);
this.textServer.Text = "ftp://";
this.buttonOpen.Location = new System.Drawing.Point(371, 31);
this.buttonOpen.Size = new System.Drawing.Size(103, 23);
this.buttonOpen.Text = "Open";
this.buttonOpen.Click = new System.EventHandler(this.OnOpen);
this.statusStrip1.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.Table;
this.statusStrip1.Location = new System.Drawing.Point(0, 0);
this.statusStrip1.Size = new System.Drawing.Size(496, 18);
this.statusStrip1.Text = "statusStrip1";
this.listFiles.FormattingEnabled = true;
this.listFiles.Location = new System.Drawing.Point(28, 149);
this.listFiles.Size = new System.Drawing.Size(315, 160);
this.listFiles.SelectedIndexChanged = new System.EventHandler(this.OnFileSelection);
this.buttonOpenDirectory.Enabled = false;
this.buttonOpenDirectory.Location = new System.Drawing.Point(371, 77);
this.buttonOpenDirectory.Name = "buttonOpenDirectory";
this.buttonOpenDirectory.Size = new System.Drawing.Size(103, 23);
this.buttonOpenDirectory.TabIndex = 8;
this.buttonOpenDirectory.Text = "Open Directory";
this.buttonOpenDirectory.Click = new System.EventHandler(this.OnOpenDirectory);
this.buttonGetFile.Enabled = false;
this.buttonGetFile.Location = new System.Drawing.Point(371, 122);
this.buttonGetFile.Size = new System.Drawing.Size(103, 23);
this.buttonGetFile.Text = "Get File";
this.buttonGetFile.Click = new System.EventHandler(this.OnDownloadFile);
this.checkBoxBinary.AutoSize = true;
this.checkBoxBinary.Checked = true;
this.checkBoxBinary.CheckState = System.Windows.Forms.CheckState.Checked;
this.checkBoxBinary.Location = new System.Drawing.Point(371, 190);
this.checkBoxBinary.Size = new System.Drawing.Size(81, 17);
this.checkBoxBinary.Text = "Binary Mode";
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(28, 62);
this.label2.Size = new System.Drawing.Size(54, 13);
this.label2.Text = "Username:";
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(28, 101);
this.label3.Size = new System.Drawing.Size(52, 13);
this.label3.Text = "Password:";
this.textUsername.Location = new System.Drawing.Point(109, 62);
this.textUsername.Size = new System.Drawing.Size(146, 20);
this.textUsername.Text = "Anonymous";
this.textPassword.Location = new System.Drawing.Point(109, 101);
this.textPassword.PasswordChar = '?';
this.textPassword.Size = new System.Drawing.Size(146, 20);
this.textPassword.UseSystemPasswordChar = true;
this.ClientSize = new System.Drawing.Size(496, 353);
this.Controls.Add(this.textPassword);
this.Controls.Add(this.textUsername);
this.Controls.Add(this.label3);
this.Controls.Add(this.label2);
this.Controls.Add(this.checkBoxBinary);
this.Controls.Add(this.buttonGetFile);
this.Controls.Add(this.buttonOpenDirectory);
this.Controls.Add(this.listFiles);
this.Controls.Add(this.buttonOpen);
this.Controls.Add(this.textServer);
this.Controls.Add(this.label1);
this.Text = "FTP Client";
this.ResumeLayout(false);
this.PerformLayout();
}
private System.Windows.Forms.Label label1;
private System.Windows.Forms.TextBox textServer;
private System.Windows.Forms.Button buttonOpen;
private System.Windows.Forms.StatusStrip statusStrip1;
private System.Windows.Forms.ListBox listFiles;
private System.Windows.Forms.Button buttonOpenDirectory;
private System.Windows.Forms.Button buttonGetFile;
private System.Windows.Forms.SaveFileDialog saveFileDialog1;
private System.Windows.Forms.CheckBox checkBoxBinary;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.TextBox textUsername;
private System.Windows.Forms.TextBox textPassword;
[STAThread]
static void Main() {
Application.EnableVisualStyles();
Application.Run(new FtpClientForm());
}
}