前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C#通过FtpWebResponse 编写GUI 简易 FTP客户端

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

原创
作者头像
用户7705674
修改2021-11-03 09:48:01
8210
修改2021-11-03 09:48:01
举报
文章被收录于专栏:css小迷妹css小迷妹
代码语言: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());
}

}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档