杜思波2008
最近公司有个项目需要用到FTP相关功能,老总把这个光荣的使命交给了我来完成,当然我肯定不能也不敢怠慢,说时迟那时快,接到指令我就和SHELL一样开始工作了。
首先我们讲一下要实现FTP要用到什么:
第一命名空间:using System.Net,使用改命名空间可以引用FtpWebRequest相关功能函数。
下面我公布一下我的代码文件,提供给大家参考:
- #region 上传文件
- /// <summary>
- /// 上传文件
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private void Update_Click(object sender, EventArgs e)
- {
- Update.Multiselect = true;
- Update.Title = "XXFTP专用";
- Update.Filter = "所有文件|*.*";
- if (Update.ShowDialog() == DialogResult.OK)
- {
- if (Update.FileNames.Length == 0)
- {
- MessageBox.Show("请选择文件");
- }
- else
- {
- Thread SendFile = new Thread(UpdateFile);//注意这里,使用线程,如果不是用线程,再实现功能时候,界面会很慢,主要是主线程被占用~~~~~~~
- SendFile.Start();
- }
- }
- }
- /// <summary>
- /// 上传文件
- /// </summary>
- /// <param name="FileName"></param>
- private void UpdateFile()
- {
- delete.Enabled= Clears.Enabled=DownLoadFiles.Enabled=PeoZhi.Enabled= Updates.Enabled = false;
- for (int file = 0; file < Update.FileNames.Length; file++)
- {
- SoftInfo.Items.Add("选中文件:" + Update.FileNames[file].ToString());
- string FileName = Update.FileNames[file].ToString();
- SoftInfo.Items.Add("正在上传中..................").ForeColor = Color.Green;
- try
- {
- Ftp(WebRequestMethods.Ftp.UploadFile,FileName);
- }
- catch (Exception ex)
- {
- SoftInfo.Items.Add("上传失败 :(").ForeColor = Color.Red;
- }
- }
- delete.Enabled = Clears.Enabled = DownLoadFiles.Enabled = PeoZhi.Enabled = Updates.Enabled = true;
- LoadServerFile(WebRequestMethods.Ftp.ListDirectory);
- }
- /// <summary>
- /// Ftp公共调用函数,用来连接Ftp服务器,并且对相应文件操作
- /// </summary>
- /// <param name="Type">操作类型</param>
- /// <param name="FileName">相关文件的文件名</param>
- private void Ftp(string Type,string FileName)
- {
- FileInfo Files = new FileInfo(FileName);
- string Url = "ftp://" + ServerIP + "/" + FileName;
- FtpWebRequest RequestFtp;
- RequestFtp = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ServerIP + "/" + Files.Name));
- RequestFtp.Credentials = new NetworkCredential(UserID, Password);
- RequestFtp.KeepAlive = false;
- RequestFtp.Method = Type;
- RequestFtp.UseBinary = true;
- RequestFtp.ContentLength = Files.Length;
- int buffsize = 2048;
- byte[] buff = new byte[buffsize];
- int contentLen;
- FileStream fs = Files.OpenRead();
- Stream stm = RequestFtp.GetRequestStream();
- contentLen = fs.Read(buff, 0, buffsize);
- while (contentLen != 0)
- {
- stm.Write(buff, 0, contentLen);
- contentLen = fs.Read(buff, 0, contentLen);//长度
- }
- SoftInfo.Items.Add("上传成功 :)").ForeColor = Color.Green;
- //关闭相应流
- stm.Close();
- fs.Close();
- }
- #endregion
- #region 下载服务器文件
- private void DownLoad_Click(object sender, EventArgs e)
- {
- if (Download.ShowDialog() == DialogResult.OK)
- {
- Thread Down = new Thread(new ThreadStart(DownLoad));
- Down.Start();
- }
- }
- private void DownLoad()
- {
- for (int files = 0; files < FileList.Items.Count; files++)
- DownloadFile(Download.SelectedPath, FileList.Items[files].Text);
- SoftInfo.Items.Add("文件下载完毕,保存在:" + Download.SelectedPath).ForeColor=Color.Green;
- }
- /// <summary>
- /// 文件下载
- /// </summary>
- /// <param name="filePath">文件路径</param>
- /// <param name="fileName">文件名</param>
- private void DownloadFile(string filePath, string fileName)
- {
- FtpWebRequest reqFTP;
- try
- {
- FileStream outputStream = new FileStream(filePath + "//" + fileName, FileMode.Create);
- reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ServerIP + "/" + fileName));
- reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
- reqFTP.UseBinary = true;
- reqFTP.Credentials = new NetworkCredential(UserID, Password);
- FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
- Stream ftpStream = response.GetResponseStream();
- long cl = response.ContentLength;
- int bufferSize = 2048;
- int readCount;
- byte[] buffer = new byte[bufferSize];
- readCount = ftpStream.Read(buffer, 0, bufferSize);
- while (readCount > 0)
- {
- outputStream.Write(buffer, 0, readCount);
- readCount = ftpStream.Read(buffer, 0, bufferSize);
- }
- ftpStream.Close();
- outputStream.Close();
- response.Close();
- }
- catch (Exception ex)
- {
- MessageBox.Show(ex.Message);
- }
- }
- #endregion