C#中的FTP类
来源:互联网 发布:李小龙拳脚力量数据 编辑:程序博客网 时间:2024/06/03 18:51
public class FtpHelper { /// <summary> /// /// </summary> /// <param name="fileName">上传的文件名</param> /// <param name="ftpServerIP"></param> /// <param name="path"></param> /// <param name="userName"></param> /// <param name="password"></param> /// <param name="form">窗体</param> /// <param name="pbarProcessUpload">进度条</param> /// <returns></returns> public static bool UploadFileByFtpWebRequest(string fileName, string ftpServerIP, string path, string userName, string password, System.Windows.Forms.Form form, System.Windows.Forms.ProgressBar pbarProcessUpload) { bool result = true; string url = string.Format("ftp://{0}/{1}/{2}", ftpServerIP, path, fileName.Substring(fileName.LastIndexOf(@"\") + 1)); FtpWebRequest request = (FtpWebRequest)WebRequest.Create(url); request.Credentials = new NetworkCredential(userName, password); request.Method = WebRequestMethods.Ftp.UploadFile; Stream stream = request.GetRequestStream(); FileStream fileStream = new FileStream(fileName, FileMode.Open); int packageSize = 1024 * 1024; int packageCount = (int)(fileStream.Length / packageSize); int rest = (int)(fileStream.Length % packageSize); //控制进度条 form.BeginInvoke(new DoSomething(delegate() { pbarProcessUpload.Maximum = packageCount; if (rest != 0) pbarProcessUpload.Maximum += 1; })); for (int index = 0; index < packageCount; index++) { byte[] buffer = new byte[packageSize]; fileStream.Read(buffer, 0, buffer.Length); stream.Write(buffer, 0, buffer.Length); form.BeginInvoke(new DoSomething(delegate() { pbarProcessUpload.Value = index; })); } if (rest != 0) { byte[] buffer = new byte[rest]; fileStream.Read(buffer, 0, buffer.Length); stream.Write(buffer, 0, buffer.Length); form.BeginInvoke(new DoSomething(delegate() { pbarProcessUpload.Value += 1; })); } stream.Close(); fileStream.Close(); return result; } /// <summary> /// 下载方法 /// </summary> /// <param name="fileName">下载的文件名</param> /// <param name="ftpServerIP"></param> /// <param name="path"></param> /// <param name="userName"></param> /// <param name="password"></param> /// <param name="form">窗体</param> /// <param name="pbarProcessDownload">进度条</param> /// <param name="fileNameSaveAs">保存的文件名</param> /// <returns></returns> public static bool DownloadFileByFtpWebRequest(string fileName, string ftpServerIP, string path, string userName, string password, System.Windows.Forms.Form form, System.Windows.Forms.ProgressBar pbarProcessDownload, string fileNameSaveAs) { bool result = true; string url = string.Format("ftp://{0}/{1}/{2}", ftpServerIP, path, fileName.Substring(fileName.LastIndexOf(@"\") + 1)); FtpWebRequest requsetOfLength = (FtpWebRequest)WebRequest.Create(url); requsetOfLength.Credentials = new NetworkCredential(userName, password); requsetOfLength.Method = WebRequestMethods.Ftp.GetFileSize; long fileSize = requsetOfLength.GetResponse().ContentLength; FtpWebRequest request = (FtpWebRequest)WebRequest.Create(url); request.Credentials = new NetworkCredential(userName, password); request.UseBinary = true; request.KeepAlive = false; request.Method = WebRequestMethods.Ftp.DownloadFile; FtpWebResponse response = (FtpWebResponse)request.GetResponse(); Stream stream = response.GetResponseStream(); FileStream fileStream = new FileStream(fileNameSaveAs, FileMode.Create); int bufferSize = 2048; int readCount; int Maximum = (int)fileSize / bufferSize; if (Maximum == 0) Maximum = 100; byte[] buffer = new byte[bufferSize]; readCount = stream.Read(buffer, 0, bufferSize); form.BeginInvoke(new DoSomething(delegate() { pbarProcessDownload.Maximum = Maximum; })); int index = 0; while (readCount > 0) { fileStream.Write(buffer, 0, readCount); readCount = stream.Read(buffer, 0, bufferSize); form.BeginInvoke(new DoSomething(delegate() { if (index <= pbarProcessDownload.Maximum) pbarProcessDownload.Value = index++; } )); } stream.Close(); fileStream.Close(); response.Close(); form.BeginInvoke(new DoSomething(delegate() { pbarProcessDownload.Value = 0; })); return result; } private delegate void DoSomething(); }
测试窗体
代码:
public partial class FormFtpTest : Form
{
public FormFtpTest()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog openDlg = new OpenFileDialog();
if (openDlg.ShowDialog() != DialogResult.OK) return;
string fileName = openDlg.FileName;
Thread thread = new Thread(new ThreadStart(delegate()
{
bool result = Common.FtpHelper.UploadFileByFtpWebRequest(fileName, "172.213.253.158", "\\", "wx", "123", this, pbarProcessUpload);
if (result) MessageBox.Show("ok");
else MessageBox.Show("error");
}));
thread.Start();
}
private void button2_Click(object sender, EventArgs e)
{
SaveFileDialog saveDlg = new SaveFileDialog();
saveDlg.FileName = textBox1.Text;
if (saveDlg.ShowDialog() != DialogResult.OK) return;
string fileName = saveDlg.FileName;
Thread thread = new Thread(new ThreadStart(delegate()
{
bool result = Common.FtpHelper.DownloadFileByFtpWebRequest(textBox1.Text, "172.123.213.51", "\\", "wx", "123", this, pbarProcessUpload, fileName);
if (result) MessageBox.Show("ok");
else MessageBox.Show("error");
}));
thread.Start();
}
}
- C#中的FTP类
- 修订 基于C#的ftp操作类 中的一个问题
- C# FTP操作类
- C# FTP操作类
- C# FTP操作类
- C# FTP工具类
- C# FTP操作类
- c# FTP操作类
- C# FTP操作类
- c# FTP操作类
- C# FTP操作类
- C# FTP操作类
- C# FTP操作类
- C# FTP操作类
- c# FTP操作类
- C# ftp操作类
- C# FTP操作类
- C# FTP 工具类
- ArrayList 和 Array之间的转换
- A hexo theme inspired by vuejs.org 搭建了个博客
- Toolbar中无法显示optionMenu中icon的问题
- 第四周项目5递归求阶乘2
- 初识Java
- C#中的FTP类
- MERGE into的用法
- HDOJ 1060 Leftmost Digit
- Viewpager+Fragment实现滚动效果
- 全排列
- Win10+VS2013+CUDA7.5 Caffe 配置过程
- 19.位运算实战演练
- 计算机网络学习笔记——计算机网络的概述(2)
- JavaWeb开发之十八:jsp简单标签开发案例和打包