关于C#对于FTP的上传下载操作

最近在内蒙古出差,做了一个关于ftp上传下载的小程序,在此只是记录一下,也希望各位大牛给出批评和指教!

    1. 首先获得FTP的网络允许,即获得连接的许可,当然会有用户名和密码的输入

 public FtpWeb(string FtpServerIP, string FtpRemotePath, string FtpUserID, string FtpPassword)
        {   
            //IP地址
            ftpServerIP = FtpServerIP;
            //Ftp文件路径
            ftpRemotePath = FtpRemotePath;
            //登录Ftp的用户名
            ftpUserID = FtpUserID;
            //登录Ftp的密码
            ftpPassword = FtpPassword;
            //拼接了一个文件的URL
            ftpURI = "ftp://" + ftpServerIP + "/" + ftpRemotePath + "/";
        }

 注:ftpRemotePath的值为ftp文件的路径不包含两边的‘/’

2.获得访问权限后,进行下载操作

 

 /// <summary>
        /// 下载
        /// </summary>
        /// <param name="filePath"></param>
        /// <param name="fileName"></param>
        public bool Download(string filePath, string fileName)
        {
            //定义一个FtpWebRequest的请求对象
            FtpWebRequest reqFTP;
            try
            {
                 //创建一个文件流对象,并赋值(下载到本地的地址及文件名,文件生成的方式)
                FileStream outputStream = new FileStream(filePath + "\\" + fileName, FileMode.Create);
               
                //给请求对象赋值(要下载文件的路径)
                reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + fileName));
                //定义请求的方式(下载)
                reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
                //指示服务器要传输的是二进制数据;false,指示数据为文本。默认值为 true
                reqFTP.UseBinary = true;
                //获取ftp通信的凭据
                reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
                //返回服务器对于请求的响应
                FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
                //获得服务器响应返回的流
                Stream ftpStream = response.GetResponseStream();
                //获得服务器上的接受流的长度
                long cl = response.ContentLength;
               
                int bufferSize = 2048;
                int readCount;
                byte[] buffer = new byte[bufferSize];
                //设置字符数组的形式,从第一个字符开始读,字符大小为2048
                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();

                return true;
            }
            catch (Exception ex)
            {
                Insert_Standard_ErrorLog.Insert("FtpWeb", "Download Error --> " + ex.Message);
                return false;
            }
        }

 

 3.上传

 /// <summary>
        /// 上传
        /// </summary>
        /// <param name="filename"></param>
        public void Upload(string filename)
        {
            FileInfo fileInf = new FileInfo(filename);
            string uri = ftpURI + fileInf.Name;
            FtpWebRequest reqFTP;

            reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
            reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
            reqFTP.KeepAlive = false;
            reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
            reqFTP.UseBinary = true;
            reqFTP.ContentLength = fileInf.Length;
            int buffLength = 2048;
            byte[] buff = new byte[buffLength];
            int contentLen;
            FileStream fs = fileInf.OpenRead();
            try
            {
                Stream strm = reqFTP.GetRequestStream();
                contentLen = fs.Read(buff, 0, buffLength);
                while (contentLen != 0)
                {
                    strm.Write(buff, 0, contentLen);
                    contentLen = fs.Read(buff, 0, buffLength);
                }
                strm.Close();
                fs.Close();
            }
            catch (Exception ex)
            {
                Insert_Standard_ErrorLog.Insert("FtpWeb", "Upload Error --> " + ex.Message);
            }
        }

   本人以为上传和下载只是文件的流的filemode有区别,这里边的文件流的知识一直感觉很深奥,关于所有东西转化成二进制,然后又将二进制转化成所有的东西,期待哪位大牛能将宝贵的经验和理论发布出来供大家学习。 我这里的代码想必大家都知道,我的初衷是能真正的明白01世界转换的真正原理,行了不废话了,虚心接受各位的批评!

 

转载于:https://www.cnblogs.com/weiyang/archive/2012/07/23/2604698.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值