C# FTP上传和下载文件操作

2023-05-16

目录

    • 1、初始化FTP
    • 2、上传文件
    • 3、下载文件
    • 4、代码描述

   我们使用C# 需要通过FTP访问服务器时,那么上位机就要作为客户端,通过连接FTP服务来上传下载文件。这里用实际代码和简要的文字描述一下。


1、初始化FTP

   见代码描述段中的构造函数 FtpOperation(),在初始化类的同时将用户各个参数初始化。
   首先,将服务器IP传递过来,这个是第一重要的。其次,将用户ID、密码以及路径信息获取。最后,将其它参数赋初值。


2、上传文件

   上传文件,即,将本地的文件拷贝到服务器上。封装了的接口DoUpload(),调用之前要陪将对应的本地路径参数获取赋值,这里为一个全路径参数。

参考上传实现函数
private void UploadFile(string FileName)


3、下载文件

   下载文件,即,将服务器上的文件拷贝到本地。封装了的接口DoDownload(),调用之前要陪将对应的本地路径参数获取赋值,这里包括要下载的文件名以及本地全路径名。

参数看下载实现函数
public void DownloadFile(string FileName, string LocalSavePath)


4、代码描述


 class FtpOperation
 {
        private string ftpServerIP;//服务器IP
        private string ftpRemotePath;//服务器路径
        private string ftpUserID;//用户
        private string ftpPassword;//密码
        private string ftpURI;//FTP服务器的全路径
        private int BUF_SIZE;//文件缓存大小
        public string ftp_local_path;//本地全路径        
        public string ftp_local_name;//本地文件名称
        public bool error_state;//错误状态

        /// <summary>
        /// 初始化FTP
        /// </summary>
        /// <param name="FtpServerIP">FTP连接地址</param>
        public FtpOperation(string ServerIP)
        {
            ftpServerIP = ServerIP;
            ftpRemotePath = "";
            ftpUserID = "ftpuser";
            ftpPassword = "pswd";
            ftpURI = "ftp://" + ftpServerIP + ftpRemotePath + "/";
            ftp_local_path = "";
            ftp_local_name = "";
            error_state = false;
        }
                 

        /// <summary>
        /// 上传接口
        /// </summary>
        public void DoUpload()
        {
            UploadFile(ftp_local_path);
        }

        /// <summary>
        /// 下载接口
        /// </summary>
        public void DoDownload()
        {
            DownloadFile(ftp_local_name, ftp_local_path);
        }

        /// <summary>
        /// 上传
        /// </summary>
        /// <param name="filename">文件名</param>
        private void UploadFile(string FileName)
        {
            FileInfo fileInfo = new FileInfo(FileName);
            string uri = ftpURI + fileInfo.Name;//目标文件路径            
            FtpWebRequest reqFTP;//请求参数
            reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));//创建FTP请求
            reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);//网络凭证
            reqFTP.KeepAlive = false;//使用后断开
            reqFTP.Method = WebRequestMethods.Ftp.UploadFile;//上传模式
            reqFTP.UseBinary = true;//二进制数据
            //reqFTP.UsePassive = false;//是否监听连接
            reqFTP.ContentLength = fileInfo.Length;//文件大小
            BUF_SIZE = (int)fileInfo.Length;//文件buf大小
            reqFTP.Timeout = 30000;//超时ms 
            byte[] buff = new byte[BUF_SIZE];//新建buf字符空间
            int ContentLength;
            FileStream fs = fileInfo.OpenRead();//建读数据流
            try
            {
                Stream strm = reqFTP.GetRequestStream();//上传数据
                ContentLength = fs.Read(buff, 0, BUF_SIZE);//读内容长度
                while (ContentLength != 0)
                {
                    strm.Write(buff, 0, ContentLength);
                    ContentLength = fs.Read(buff, 0, BUF_SIZE);
                }
                //关闭
                strm.Close();
                fs.Close();
            }
            catch (Exception ex)
            {
                error_state = true;
                MessageBox.Show(ex.Message);
            }
        }

        /// <summary>
        /// 下载
        /// </summary>
        /// <param name="LocalSavePath">本地文件路径</param>
        /// <param name="fileName">服务端文件名</param>
        public void DownloadFile(string FileName, string LocalSavePath)
        {
            FtpWebRequest reqFTP;
            try
            {
                FileStream outputStream = new FileStream(LocalSavePath, FileMode.Create);//本地输出流
                reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpUserID + ":" + ftpPassword + "@" + ftpServerIP + "/" + FileName));//创建FTP请求
                reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;//下载
                reqFTP.UseBinary = true;//二进制
                reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);//网络凭证
                //reqFTP.UsePassive = false;//是否监听连接
                FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();//响应服务器
                Stream ftpStream = response.GetResponseStream();//响应数据流 
                BUF_SIZE = (int)response.ContentLength;//数据大小             
                int readCount;
                byte[] buffer = new byte[BUF_SIZE];
                readCount = ftpStream.Read(buffer, 0, BUF_SIZE);//读取数据流
                while (readCount > 0)
                {
                    outputStream.Write(buffer, 0, readCount);
                    readCount = ftpStream.Read(buffer, 0, BUF_SIZE);
                }
                //关闭
                ftpStream.Close();
                outputStream.Close();
                response.Close();
            }
            catch (Exception ex)
            {
                error_state = true; 
                MessageBox.Show(ex.Message);
            }
        }
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# FTP上传和下载文件操作 的相关文章

随机推荐

  • Qt报错汇总

    1 DirectShowPlayerService doRender Unresolved error code 0x80040266 IDispatch error 102 使用Qt的MediaPlayer控件时报的错 原因 xff1a
  • ubuntu18.04 ros 安装 gazebo9

    三 Gazebo安装 如果前面安装ros 的时候安装了gazebo 这里进行卸载 xff08 1 xff09 sudo apt get remove gazebo xff08 2 xff09 sudo apt get remove libg
  • CMake 常用总结一:CMake 单个文件目录

    引言 CMake 实践帮助我们对 CMake 有一个系统全面的了解 xff0c 并且有大量示例以供参考 xff0c 至少在实际项目中可以让我们有能力看懂并修改项目中现有的 CMake 阅读完 CMake 实践文档 xff0c 认为自己的任务
  • 面试(opencv)

    作者 xff1a 孙兔子 xff08 本人 xff09 链接 xff1a 面试题 xff08 opencv xff09 讨论帖 牛客网 来源 xff1a 牛客网 12 xff09 形态学梯度 复制代码 1 2 3 4 5 6 7 8 9 1
  • mysql锁系列之MDL元数据锁之一

    基础材料 xff1a centos7 5 mysql 5 7 24 当mysql运行一条SQL语句时 xff0c 在你预期的时间内 xff0c 没有完成时 xff0c 我们都会登陆到mysql数据库上想查看是不是出了什么问题 xff0c 通
  • 【转】TCP 网络状态图详解

    http blog csdn net wenqian1991 article details 40110703 在前面 xff0c 已经介绍了TCP协议的三路握手和四次挥手 如下图所示 xff0c TCP通信过程包括三个步骤 xff1a 建
  • Ubuntu2018安装Gazebo9

    很高兴大家可以阅读我的文章 xff0c 不胜荣幸 xff0c 希望我的经验能够给大家带来些许益处 xff01 Ubuntu2018安装Gazebo9 或许看到这篇文章的你是第一次接触到Gazebo xff0c 我也是 我写这篇文章的目的就是
  • 树莓派串口配置(c++)

    文章目录 前言一 wiringPi库是什么 xff1f 二 使用步骤1 安装库和接口介绍2 C 43 43 串口配置 总结注意点 xff1a 前言 最近做项目 xff0c 在树莓派上用到串口来实现通信功能 所以用c 43 43 写了个串口的
  • 不带头结点的单链表的实现

    不带头结点的单链表的实现 单链表是一种链式存取的数据结构 xff0c 用一组地址任意的存储单元存放线性表中的数据元素 链表中的数据是以结点来表示的 xff0c 每个结点的构成 xff1a 元素 数据元素的映象 43 指针 指示后继元素存储位
  • 顺序队列和链队列

    顺序队列和链队列 队列的定义 xff1a 队列是一种特殊的线性表 xff0c 是一种先进先出 xff08 FIFO xff09 的数据结构 它只允许在表的前端 xff08 front xff09 进行删除操作 xff0c 而在表的后端 xf
  • c++类模板

    类模板 什么是类模板 xff1f 模板的目的就是为了淡化数据类型的要求 xff0c 作出通用数据类型的模板 类中的成员变量和成员函数都牵涉到了数据类型 在成员函数 成员变量以及基类中包含有类型参数的类称为类模板 和函数模板一样 xff0c
  • 4G虚拟地址空间

    虚拟地址空间分布 对于每一个进程都会对应一个虚拟地址空间 xff0c 对于32位的操作系统 xff08 其指令的位数最大为32位 xff0c 因此地址码最多32位 xff09 xff0c 虚拟地址空间的大小为2 32 B即0 4GB的虚拟地
  • 编译链接原理

    编译链接原理 编译阶段一共分为3部 xff1a 预编译阶段 xff0c 编译阶段 xff0c 和汇编阶段 我们先来看第一阶段 xff1a 预编译 将源代码文件 c和相关的头文件 h等 预编译成一个 i文件 gcc E hello c o h
  • Windows环境下 sphereface人脸识别模型配置caffe(一)

    本教程是在windows环境下进行 xff0c 默认caffe xff08 微软版 xff09 你已经在电脑上成功配置 sphereface人脸识别开放源码 xff1a https github com wy1iu sphereface c
  • RS422串口测试工装研究

    1 设备组成 ETst USB系统主要由硬件部分与软件部分组成 硬件部分包括1553B板卡 RS232 422 485板卡 CAN总线板卡 AD采集板卡 DA转换板卡 DI DO板卡等 所有硬件板卡均采用USB的接口形式 xff0c 从而灵
  • mysql锁系列之MDL元数据锁之三

    基础材料 xff1a centos7 5 mysql 5 7 24 前一篇说明了元数据锁的相关加锁顺序 xff0c 今天再结合online DDL更深入的研究一下这个加锁顺序究竟如何 这里先简单说明一下online DDL锁升降级的过程 x
  • 【记录】MPU6050原理快速入门(附手册)

    目录 MPU6050 MPU6050主要参数 MPU6050通信接口 MPU6050电路 向MPU6050的一个寄存器写一个字节的数据 从MPU6050的一个寄存器读一个字节的数据 MPU6050 MPU6050是一个运动处理传感器 xff
  • 关于写论文的小技巧[一]:公式编号

    论文公式怎么编号对齐 用的是word自带的公式 xff0c 编辑好公式之后如下图所示 xff1a 在公式框内容 xff0c 公式末尾出加上 xff08 1 xff09 xff0c 这里1就是你想要编辑的公式序号 xff0c 然后将光标跳到最
  • 步进电机和伺服电机有什么区别?

    步进电机和伺服电机二者都是控制电机 xff0c 都能精确控制速度 但是二者控制速度的原理不同 xff1a 伺服电机是闭环控制 xff08 通过编码器反馈等完成 xff09 xff0c 即 xff1a 会实时测定电机的速度后自动加以调整 xf
  • C# FTP上传和下载文件操作

    目录 1 初始化FTP2 上传文件3 下载文件4 代码描述 我们使用C 需要通过FTP访问服务器时 xff0c 那么上位机就要作为客户端 xff0c 通过连接FTP服务来上传下载文件 这里用实际代码和简要的文字描述一下 1 初始化FTP 见