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,如需转载请自行联系原作者


相关文章
|
3天前
|
C#
基于 C# 编写的 Visual Studio 文件编码显示与修改扩展插件
基于 C# 编写的 Visual Studio 文件编码显示与修改扩展插件
|
3月前
|
存储 C#
【C#】大批量判断文件是否存在的两种方法效率对比
【C#】大批量判断文件是否存在的两种方法效率对比
52 1
|
3月前
|
C#
如何使用c# 实现断点续传功能
如何使用c# 实现断点续传功能
32 0
|
3月前
|
网络协议 C#
C#:简化版的实现断点续传功能
C#:简化版的实现断点续传功能
41 0
|
3月前
|
XML 存储 缓存
C#使用XML文件的详解及示例
C#使用XML文件的详解及示例
119 0
|
5月前
|
编译器 C# Windows
C#基础:手动编译一个.cs源代码文件并生成.exe可执行文件
通过上述步骤,应该能够高效准确地编译C#源代码并生成相应的可执行文件。此外,这一过程强调了对命令行编译器的理解,这在调试和自动化编译流程中是非常重要的。
399 2
|
5月前
|
C# 图形学 数据安全/隐私保护
Unity数据加密☀️ 二、使用Rider将C#代码生成DLL文件
Unity数据加密☀️ 二、使用Rider将C#代码生成DLL文件
|
5月前
|
Java
Java SpringBoot FTP 上传下载文件
Java SpringBoot FTP 上传下载文件
187 0
|
5月前
|
C#
C# 写日志文件
C# 写日志文件
52 0
|
C# 数据安全/隐私保护