qq524061227 发表于 2015-5-29 12:16:29

自己写的一个可行且简单的FTP操作类

  using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.IO;
  public class MyFtp
{
    //构造方法
    public MyFtp()
    {
  }
    public MyFtp(string ftpPR, string loginName, string loginPwd)
    {
      this.ftpPR = ftpPR;
      this.loginName = loginName;
      this.loginPwd = loginPwd;
    }
    //FTP名(例如ftp://accp001/)
    string ftpPR;
    //Ftp服务器用户名
    string loginName;
    //Ftp服务器登录密码
    string loginPwd;
    // 声明请求
    FtpWebRequest reqFTP;
    //建立Ftp连接,method值为WebRequestMethods.Ftp的枚举,fileLength上传文件的大小
    public void FtpConnection(string fileName)
    {
  reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(fileName));
  // 销毁到服务器的连接
      reqFTP.KeepAlive = true;
      // 设置要发送的命令形式
  // 设置要2进制传递文件
      reqFTP.UseBinary = true;
      // 设置登陆的用户名和密码
      reqFTP.Credentials = new NetworkCredential(loginName, loginPwd);
    }
    //获取FTP上指定下载文件的大小
    public long GetFileSize(string fileName)
    {
      FtpConnection(fileName);
      reqFTP.Method = WebRequestMethods.Ftp.GetFileSize;
      // 获取ftp给的响应
      FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
      return response.ContentLength;
    }
    //filePath文件保存位置,服务器上fileName含FTP地址完整文件名,下载方法
    public void Download(string filePath, string fileName, string saveName)
    {
  FtpConnection(fileName);
      //设定请求使用方法
      reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
      // 获取ftp给的响应
      FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
      Stream ftpStream = response.GetResponseStream();
  // 建立本地保存文件流
      FileStream outputStream = new FileStream(filePath + saveName, FileMode.Create);
  int bufferSize = 2048;
      int readCount;
      byte[] buffer = new byte;
      readCount = ftpStream.Read(buffer, 0, bufferSize);
      while (readCount > 0)
      {
            outputStream.Write(buffer, 0, readCount);
            readCount = ftpStream.Read(buffer, 0, bufferSize);
      }
  outputStream.Close();
      ftpStream.Close();
      response.Close();
  }
    //重载下载方法
    public void Download(string filePath, string fileName)
    {
      Download(filePath, fileName, fileName.Substring(fileName.LastIndexOf(@"/") + 1));
    }
  //上载文件,fileName本地文件名,fileNewName服务器上名称,path服务器上保存名nfileNewName保存名
    public void Upload(string fileName, string path, string fileNewname)
    {
      string strFileName = "";
  // 获取文件的相关信息
      FileInfo fileInf = new FileInfo(fileName);
      if (fileNewname == "" || fileName == null)
      {
            strFileName = fileInf.Name;
      }
      else
      {
            strFileName = fileNewname;
      }
  FtpConnection(path + strFileName);
      reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
      // 传输文件的数据格式Binary
      reqFTP.UseBinary = true;
      // 文件是多大
      reqFTP.ContentLength = fileInf.Length;
  // 缓冲大小设置为2kb
      int buffLength = 2048;
      byte[] buff = new byte;
      int contentLen;
      // 获取ftp给的响应
  Stream strm = reqFTP.GetRequestStream();
  // 把文件读入到流中
      FileStream fs = fileInf.OpenRead();
      // 用于存储要由当前请求发送到服务器的数据。
      // 把文件流分装成小的字节数组,防止占用太多的服务器内存
      contentLen = fs.Read(buff, 0, buffLength);
      // 循环把文件流写入待发给ftp服务器的请求流中
  while (contentLen != 0)
      {
            strm.Write(buff, 0, contentLen);
            contentLen = fs.Read(buff, 0, buffLength);
      }
  fs.Close();
      strm.Close();
    }
    //重载上传方法
    public void Upload(string fileName, string path)
    {
      Upload(fileName, path, fileName.Substring(fileName.LastIndexOf(@"\") + 1));
    }
    //删除文件
  public void DeleteFileName(string fileName)
    {
      //连接         
      FtpConnection(fileName);
      // 默认为true,连接不会被关闭
      reqFTP.KeepAlive = false;
      // 指定执行什么命令
      reqFTP.Method = WebRequestMethods.Ftp.DeleteFile;
      FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
      response.Close();
    }
  //创建目录
  public void MakeDir(string dirName)
    {
      FtpConnection(dirName);
      reqFTP.Method = WebRequestMethods.Ftp.MakeDirectory;
      FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
      response.Close();
    }
  //删除目录
  public void delDir(string dirName)
    {
      //连接      
      FtpConnection(dirName);
      reqFTP.Method = WebRequestMethods.Ftp.RemoveDirectory;
      FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
      response.Close();
    }
  }
  
未作修饰了,希望对大家有帮助,winform下课添加progressbar对象做参数修改一下就可以支持进度条,谢谢大家阅览。
页: [1]
查看完整版本: 自己写的一个可行且简单的FTP操作类