C#通过FtpWebResponse 编写GUI 简易 FTP客户端

2021-11-03 09:48:01 浏览数 (1)

代码语言: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());
}

}

0 人点赞