C# Ftp方式下载文件(无用户认证方式,支持断点续传)

简介:

类代码:

复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.IO; 

namespace ConsoleTest
{
    class FtpDlder
    {
        public void download(String url, String localFile)
        {
            FtpWebRequest remoteFileLenReq; // 此请求是为了获取远程文件长度
            FtpWebRequest remoteFileReadReq;// 此请求是为了读取文件
            Stream readStream = null;       // 读取流
            FileStream writeStream = null;  // 写本地文件流

            try
            {
                writeStream = new FileStream(localFile, FileMode.Append);
                long startPosition=writeStream.Length;// 读出本地文件已有长度

                // 下面代码目的是取远程文件长度
                remoteFileLenReq = (FtpWebRequest)FtpWebRequest.Create(url);
                remoteFileLenReq.UseBinary = true;
                remoteFileLenReq.ContentOffset = 0;
                remoteFileLenReq.Method = WebRequestMethods.Ftp.GetFileSize;
                FtpWebResponse rsp = (FtpWebResponse)remoteFileLenReq.GetResponse();
                long totalByte = rsp.ContentLength;
                rsp.Close();

                if (startPosition >= totalByte)
                {
                    System.Console.WriteLine("本地文件长度" + startPosition + "已经大于等于远程文件长度" + totalByte);
                    writeStream.Close();

                    return;
                }

                // 初始化读取远程文件请求
                remoteFileReadReq = (FtpWebRequest)FtpWebRequest.Create(url);
                remoteFileReadReq.UseBinary = true;
                remoteFileReadReq.KeepAlive = false;
                remoteFileReadReq.ContentOffset = startPosition;
                remoteFileReadReq.Method = WebRequestMethods.Ftp.DownloadFile;
                FtpWebResponse response = (FtpWebResponse)remoteFileReadReq.GetResponse();
                readStream = response.GetResponseStream();

                long downloadedByte = startPosition;
                int bufferSize = 512;
                byte[] btArray = new byte[bufferSize];
                int contentSize = readStream.Read(btArray, 0, btArray.Length);

                while (contentSize > 0)
                {
                    downloadedByte += contentSize;
                    int percent = (int)(downloadedByte * 100 / totalByte);
                    System.Console.WriteLine("percent=" + percent + "%");

                    writeStream.Write(btArray, 0, contentSize);
                    contentSize = readStream.Read(btArray, 0, btArray.Length);
                }
                readStream.Close();
                writeStream.Close();
                response.Close();
                return;
            }
            catch (Exception)
            {
                return;

            }
            finally
            {
                if (readStream != null)
                {
                    readStream.Close();
                }
                if (writeStream != null)
                {
                    writeStream.Close();
                }
            }  
        }
    }
}
复制代码

 

使用示例:

复制代码
        static void Main(string[] args)
        {
            // Ftp下载测试,无用户身份测试
            FtpDlder fd = new FtpDlder();
            fd.download("ftp://192.168.0.109/jump.jpg", "c:\\asd\\jump.jpg");
        }
复制代码

 

以上代码参考了 http://blog.csdn.net/jiankunking/article/details/50017009 的代码,在此向原作者表示感谢。











本文转自张昺华-sky博客园博客,原文链接:http://www.cnblogs.com/xiandedanteng/p/7090204.html,如需转载请自行联系原作者


相关文章
|
1月前
|
XML C# 数据格式
使用C#操作XML文件
使用C#操作XML文件
11 0
|
1月前
|
C#
C# 文件操作(全部) 追加、拷贝、删除、移动文件、创建目录
C# 文件操作(全部) 追加、拷贝、删除、移动文件、创建目录
23 0
|
3月前
|
C#
C#读取html文件
C#读取html文件
29 3
|
9天前
|
XML C# 数据格式
C# 解析XML文件
C# 解析XML文件
17 1
|
1月前
|
安全 数据处理 C#
C# Post数据或文件到指定的服务器进行接收
C# Post数据或文件到指定的服务器进行接收
|
1月前
|
C# 开发工具 数据安全/隐私保护
C#实现基于Word保护性模板文件的修改
C#实现基于Word保护性模板文件的修改
|
1月前
|
Shell Python Windows
通过Python实现win11环境下FTP的上传与下载
通过Python实现win11环境下FTP的上传与下载
|
1月前
|
监控 安全 测试技术
使用pyftpdlib组件实现FTP文件共享
使用pyftpdlib组件实现FTP文件共享
29 0
|
2月前
|
Java
java上传、下载、预览、删除ftp服务器上的文件
java上传、下载、预览、删除ftp服务器上的文件
|
2月前
|
C#
C# Winform 选择文件夹和选择文件
C# Winform 选择文件夹和选择文件
47 0