zoukankan      html  css  js  c++  java
  • 自己写的一个可行且简单的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[bufferSize];
            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[buffLength];
            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对象做参数修改一下就可以支持进度条,谢谢大家阅览。

  • 相关阅读:
    MYSQL学习(二)
    Nginx学习总结(一)
    关于微服务架构的个人理解(一)
    深入理解Java虚拟机(二) : 垃圾回收
    深入理解Java虚拟机(一) 运行时数据区划分
    多线程系列之 线程安全
    多线程系列之 java多线程的个人理解(二)
    多线程系列之 Java多线程的个人理解(一)
    Java基础04—字符串
    Java基础03—流程控制
  • 原文地址:https://www.cnblogs.com/ChengDong/p/1778285.html
Copyright © 2011-2022 走看看