C# 使用 FtpWebResponse 编写GUI 简易 FTP客户端
- 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());
- }
- }
复制代码
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
![扫码二维码加入Web技术交流群](/public/img/jiaqun_03.jpg)
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论