我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C#使用FtpWebRequest与FtpWebResponse完成FTP操作

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C#使用FtpWebRequest与FtpWebResponse完成FTP操作

一、WebRequestMethods.Ftp类:

表示可与 FTP 请求一起使用的 FTP 协议方法的类型。

  • Append​File:表示要用于将文件追加到 FTP 服务器上的现有文件的 FTP APPE 协议方法。
  • Delete​File:表示要用于删除 FTP 服务器上的文件的 FTP DELE 协议方法。
  • Download​File:表示要用于从 FTP 服务器下载文件的 FTP RETR 协议方法。
  • Get​Date​Timestamp:表示要用于从 FTP 服务器上的文件检索日期时间戳的 FTP MDTM 协议方法。
  • Get​File​Size:表示要用于检索 FTP 服务器上的文件大小的 FTP SIZE 协议方法。
  • List​Directory:表示获取 FTP 服务器上的文件的简短列表的 FTP NLIST 协议方法。
  • List​Directory​Details:表示获取 FTP 服务器上的文件的详细列表的 FTP LIST 协议方法。
  • Make​Directory:表示在 FTP 服务器上创建目录的 FTP MKD 协议方法。
  • Print​Working​Directory:表示打印当前工作目录的名称的 FTP PWD 协议方法。
  • Remove​Directory:表示移除目录的 FTP RMD 协议方法。
  • Rename:表示重命名目录的 FTP RENAME 协议方法。
  • Upload​File:表示将文件上载到 FTP 服务器的 FTP STOR 协议方法。
  • Upload​File​With​Unique​Name:表示将具有唯一名称的文件上载到 FTP 服务器的 FTP STOU 协议方法。

二、上传文件:

OpenFileDialog opFilDlg = new OpenFileDialog();
if (opFilDlg.ShowDialog() == DialogResult.OK)
{   ftp = new YBBFTPClass("hz.a.cn", "", "csp", "welcome", 0);
    ftp.UploadFile(opFilDlg.FileName);
    MessageBox.Show("上传成功");
}
/// <summary>
/// 文件上传
/// </summary>
/// <param name="filename">本地文件路径</param>
public void UploadFile(string filename)
{
    FileInfo fileInf = new FileInfo(filename);
    string uri = "ftp://" + RemoteHost + "/" + fileInf.Name;
    FtpWebRequest reqFTP;

    reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + RemoteHost + "/" + fileInf.Name));// 根据uri创建FtpWebRequest对象
    reqFTP.Credentials = new NetworkCredential(RemoteUser, RemotePass);    // ftp用户名和密码
    reqFTP.KeepAlive = false;    // 默认为true,连接不会被关闭, 在一个命令之后被执行
    reqFTP.Method = WebRequestMethods.Ftp.UploadFile;    // 指定执行什么命令
    reqFTP.UseBinary = true;   // 指定数据传输类型
    reqFTP.ContentLength = fileInf.Length;    // 上传文件时通知服务器文件的大小

    int contentLen;
    FileStream fileStream = fileInf.OpenRead(); // 打开一个文件读取内容到fileStream中
    contentLen = fileStream.Read(buffer, 0, buffer.Length); ;//从fileStream读取数据到buffer中

    Stream requestStream = reqFTP.GetRequestStream();
    // 流内容没有结束
    while (contentLen != 0)
    {
        requestStream.Write(buffer, 0, contentLen);// 把内容从buffer 写入 requestStream中,完成上传。
        contentLen = fileStream.Read(buffer, 0, buffer.Length);
    }

    // 关闭两个流
    requestStream.Close();
    //uploadResponse = (FtpWebResponse)reqFTP.GetResponse();
    fileStream.Close();
}

三、下载文件

1、核心代码

/// <summary>
/// 下载文件
/// </summary>
/// <param name="filePath">本地目录</param>
/// <param name="fileName">远程路径</param>
public void DownloadFile(string filePath, string fileName)
{
    FtpWebRequest reqFTP;
    try
    {
        FileStream fileStream = new FileStream(filePath + "\\" + fileName, FileMode.Create);

        reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + RemoteHost + "/" + fileName));
        reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
        reqFTP.UseBinary = true;
        reqFTP.Credentials = new NetworkCredential(RemoteUser, RemotePass);

        FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
        Stream responseStream = response.GetResponseStream();//从ftp响应中获得响应流

        //long cl = response.ContentLength;
        byte[] buffer = new byte[1024];
        int readCount;

        readCount = responseStream.Read(buffer, 0, buffer.Length);//从ftp的responseStream读取数据到buffer中
        while (readCount > 0)
        {
            fileStream.Write(buffer, 0, readCount);//从buffer读取数据到fileStream中,完成下载
            readCount = responseStream.Read(buffer, 0, buffer.Length);
        }

        responseStream.Close();
        fileStream.Close();
        response.Close();
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
}

2、winform:

FolderBrowserDialog fldDlg = new FolderBrowserDialog();
if (txtUpload.Text.Trim().Length > 0)
{
    if (fldDlg.ShowDialog() == DialogResult.OK)
    {
        ftp.DownloadFile(fldDlg.SelectedPath, txtUpload.Text.Trim());
        MessageBox.Show("下载成功");
    }
}
else
{
    MessageBox.Show("Please enter the File name to download");
}

3、webform弹出下载提示:

FtpClient _client = new FtpClient();
Stream stream = _client.OpenRead(FtpFilePath, FtpDataType.Binary);

string FtpFilePath = Request.QueryString["FilePath"];
string _fname = Path.GetFileName(FtpFilePath);
Response.ContentType = "application/" + _fname.Split('.')[1];
Response.AddHeader("Content-disposition", "attachment; filename=" + _fname);

byte[] buffer = new byte[10240];
int readCount;
do
{
    readCount = stream.Read(buffer, 0, buffer.Length);
    Response.OutputStream.Write(buffer, 0, readCount);//持续写入流
} while (readCount != 0);

Response.OutputStream.Write(buffer, 0, buffer.Length);

Response.End();

四、删除文件

string uri = "ftp://" + RemoteHost + "/" + fileName;
FtpWebRequest reqFTP;
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + RemoteHost + "/" + fileName));

reqFTP.Credentials = new NetworkCredential(RemoteUser, RemotePass);
reqFTP.KeepAlive = false;
reqFTP.Method = WebRequestMethods.Ftp.DeleteFile;

string result = String.Empty;
FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
long size = response.ContentLength;
Stream datastream = response.GetResponseStream();
StreamReader sr = new StreamReader(datastream);
result = sr.ReadToEnd();
sr.Close();
datastream.Close();
response.Close();

完整代码参考:

https://www.jb51.net/article/119779.htm

到此这篇关于C#使用FtpWebRequest与FtpWebResponse完成FTP操作的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C#使用FtpWebRequest与FtpWebResponse完成FTP操作

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

使用C#操作ftp服务器的示例代码

本篇文章提供了使用C#操作FTP服务器的示例代码。该代码演示了如何连接到服务器、列出目录、检索和上传文件,以及删除文件。此外,还提供了其他注意事项,包括高级功能和第三方库的使用。通过阅读这篇文章,开发者可以了解如何使用System.Net.FtpClient类与FTP服务器进行交互。
使用C#操作ftp服务器的示例代码
2024-04-02

Excel如何使用Ctrl + e完成数据分裂操作

这篇文章主要为大家展示了“Excel如何使用Ctrl + e完成数据分裂操作”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Excel如何使用Ctrl + e完成数据分裂操作”这篇文章吧。Ctrl
2023-06-27

Android之采用execSQL与rawQuery方法完成数据的添删改查操作详解

使用 SQLiteDatabase 操作 SQLite 数据库 代码如下:/* Android提供了一个名为SQLiteDatabase的类,该类封装了一些操作数据库的API,使用该类可以完成对数据进行添加(Create)、查询(Retri
2022-06-06

C++中Stack(栈)的使用方法与基本操作详解

Stack是一种常见的数据结构,常常被用来解决递归问题、括号匹配问题、函数调用栈等等。本文将介绍C++中stack的使用方法及基本操作,需要的可以参考一下
2023-05-19

C语言中互斥锁与自旋锁及原子操作使用浅析

今天不整GO语言,我们来分享一下以前写的C语言代码,来看看互斥锁、自旋锁和原子操作的demo,示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值
2023-01-11

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录