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

 更新时间:2022年05月16日 14:36:25   作者:springsnow  
这篇文章介绍了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操作的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Unity摇杆制作的方法

    Unity摇杆制作的方法

    这篇文章主要为大家详细介绍了Unity摇杆制作的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • C#使用对象序列化类库MessasgePack

    C#使用对象序列化类库MessasgePack

    这篇文章介绍了C#使用对象序列化类库MessasgePack的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • 3种C# 加载Word的方法

    3种C# 加载Word的方法

    本次经验内容分享通过C#程序来加载Word文档的3种不同方法。分别是:加载本地Word文档、以只读模式加载Word文档、从流加载Word 想具体了解的小伙伴请参考下文
    2021-09-09
  • C#中的多线程小试牛刀

    C#中的多线程小试牛刀

    这篇文章主要给大家介绍了关于C#中多线程的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用C#具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-05-05
  • C#使用IronPython调用Python

    C#使用IronPython调用Python

    这篇文章主要给大家介绍了关于C#使用IronPython调用Python的相关资料, c#利用IronPython调用python的过程中总会遇到种种问题,这里给大家总结下,需要的朋友可以参考下
    2023-07-07
  • C#实现Excel导入sqlite的方法

    C#实现Excel导入sqlite的方法

    这篇文章主要介绍了C#实现Excel导入sqlite的方法,是C#程序设计中非常重要的一个实用技巧,需要的朋友可以参考下
    2014-09-09
  • C#中缓存System.Web.Caching用法总结

    C#中缓存System.Web.Caching用法总结

    本文详细讲解了C#中缓存System.Web.Caching的用法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04
  • C#实现获取电脑硬件显卡核心代号信息

    C#实现获取电脑硬件显卡核心代号信息

    这篇文章主要为大家详细介绍了如何利用C#实现获取电脑硬件显卡核心代号信息,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-01-01
  • Unity 百度AI实现Logo商标识别

    Unity 百度AI实现Logo商标识别

    本文主要介绍了Unity实现检测和识别图片中的品牌LOGO信息。即对于输入的一张图片(可正常解码,且长宽比适宜),输出图片中LOGO的名称、位置和置信度。需要的可以参考一下
    2022-01-01
  • C#实现数独解法

    C#实现数独解法

    这篇文章介绍了C#实现数独解法的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06

最新评论