一、C#实现本地文件下载

1、文件下载的路径  文件名称 以及文件下载之后要放的位置  这三个变量是必须要的

2、定义以下四个对象:

FileWebRequest ftpWebRequest = null;
FileWebResponse ftpWebResponse = null;
Stream ftpResponseStream = null;
FileStream outputStream = null;

3、创建文件下载存放位置的路径(不需要手动创建,如果路径存在就创建 不存在就不创建)

Directory.CreateDirectory(LocalFolder);//创建文件夹名称

* 这里提一点  Path.Combine()这个就是文件路径拼接的函数,会自动判断,在需要的文件加  \\

比如 string filePath=  Path.Combine(“D:”,“test”,"download");  //  filePath="D:\\test\download";

4、  然后执行以下代码  即可完成文件下载

      ftpWebRequest = (FileWebRequest)FileWebRequest.Create(new Uri(uri));
ftpWebRequest.Method = WebRequestMethods.Ftp.DownloadFile;
ftpWebResponse = (FileWebResponse)ftpWebRequest.GetResponse();
ftpResponseStream = ftpWebResponse.GetResponseStream();
long contentLength = ftpWebResponse.ContentLength;
int bufferSize = 2048;
byte[] buffer = new byte[bufferSize];
int readCount;
readCount = ftpResponseStream.Read(buffer, 0, bufferSize);
while (readCount > 0)
{
outputStream.Write(buffer, 0, readCount);
readCount = ftpResponseStream.Read(buffer, 0, bufferSize);
}

5、代码写完之后要思考,下载文件的时候如何出现异常  这时在整个代码加个 Try{} catch{}

具体代码如下:

 public static void Main(string[] args)
{
TestFile tf = new TestFile();
tf.fileDownload("D:/testFile/", "下载ftp文件.txt", "C:/Users/17/Desktop/文件", "下载ftp文件.txt", DateTime.Now.ToShortDateString());
} /// <summary>
/// 下载文件
/// </summary>
/// <param name="localPath">本地文件地址(没有文件名)</param>
/// <param name="localFileName">本地文件名</param>
/// <param name="ftpPath">下载的ftp的路径</param>
/// <param name="ftpFileName">下载的ftp的文件名</param>
public bool fileDownload(string localPath, string localFileName, string ftpPath, string ftpFileName, string date)
{
bool success = false;
//FtpWebResponse ftpWebResponse = null;
FileWebRequest ftpWebRequest = null;
FileWebResponse ftpWebResponse = null;
Stream ftpResponseStream = null;
FileStream outputStream = null;
try
{
//string date = DateTime.Now.ToShortDateString().ToString();//获取系统时间
string date1 = date.Replace("/", "");//winods 中文件命名不能有 / 去掉指定字符串 /
//localPath = localPath + date1 + "/";//拼接路径 localPath=Path.Combine(localPath,date1)
Directory.CreateDirectory(localPath);//创建文件夹名称
outputStream = new FileStream(localPath + localFileName, FileMode.Create);//创建文件
string uri = ftpRootURL + ftpPath + "/" + ftpFileName;//拼接目标文件路径 string uri= Path.Combine(ftpRootURL,ftpPath,ftpFileName);
ftpWebRequest = (FileWebRequest)FileWebRequest.Create(new Uri(uri));
//ftpWebRequest1.UseBinary = true;
ftpWebRequest.Method = WebRequestMethods.Ftp.DownloadFile;
ftpWebResponse = (FileWebResponse)ftpWebRequest.GetResponse();
ftpResponseStream = ftpWebResponse.GetResponseStream();
long contentLength = ftpWebResponse.ContentLength;
int bufferSize = 2048;
byte[] buffer = new byte[bufferSize];
int readCount;
readCount = ftpResponseStream.Read(buffer, 0, bufferSize);
while (readCount > 0)
{
outputStream.Write(buffer, 0, readCount);
readCount = ftpResponseStream.Read(buffer, 0, bufferSize);
}
success = true;
}
catch (Exception e)
{ DirectoryInfo folder = new DirectoryInfo(localPath);
StreamWriter log = new StreamWriter(localPath + "/" + DateTime.Now.ToShortDateString().ToString().Replace("/", "") + ".txt", true);
log.WriteLine("发生异常时间:" + System.DateTime.Now.ToShortTimeString().ToString());
log.WriteLine("发生异常信息:" + e.Message);
log.WriteLine("发送异常对象:" + e.Source);
log.WriteLine("调用堆栈:" + e.StackTrace.Trim());
log.WriteLine("触动方法:" + e.TargetSite);
log.WriteLine(" " + e.HResult);
log.WriteLine("数据对象" + e.Data);
log.WriteLine("____________________________________________________________");
log.WriteLine();
log.Close();
success = false;
}
finally
{
if (outputStream != null)
{
outputStream.Close();
}
if (ftpResponseStream != null)
{
ftpResponseStream.Close();
} if (ftpWebResponse != null)
{
ftpWebResponse.Close();
}
}
return success;
}

二、 FTP 服务文件下载

这个功能其实和本地文件下载一样,只需要加几点即可

1、FTP服务的地址;

具体代码如下

private string ftpIP = "**********";

2、FTP文件服务的登录账号以及密码

具体代码如下

private string ftpName = "*********";
private string ftpPassword = "******";
private string ftpRootURL = string.Empty;
FtpWebRequest reqFTP;

3、获取FTP服务上的文件名称、FTP文件服务需要下载之后存放的路径以及下载功能的实现

FtpWebRequest ftpWebRequest = null;
FtpWebResponse ftpWebResponse = null;
Stream ftpResponseStream = null;
FileStream outputStream = null;
try
{
localFilePath = Path.Combine(localFilePath, ftpFileNameTime);
Directory.CreateDirectory(localFilePath);//创建文件夹名称
outputStream = new FileStream(Path.Combine(localFilePath, fileName), FileMode.Create);
string uri = Path.Combine(ftpRootURL, ftpIP, fileName);
ftpWebRequest = (FtpWebRequest)FileWebRequest.Create(new Uri(uri));
ftpWebRequest.Credentials = new NetworkCredential(ftpName, ftpPassword);//登录ftp
ftpWebRequest.UseBinary = true;
ftpWebRequest.Method = WebRequestMethods.Ftp.DownloadFile;
ftpWebResponse = (FtpWebResponse)ftpWebRequest.GetResponse();
ftpResponseStream = ftpWebResponse.GetResponseStream();
long contentLength = ftpWebResponse.ContentLength;
int bufferSize = 2048;
byte[] buffer = new byte[bufferSize];
int readCount;
readCount = ftpResponseStream.Read(buffer, 0, bufferSize);
while (readCount > 0)
{
outputStream.Write(buffer, 0, readCount);
readCount = ftpResponseStream.Read(buffer, 0, bufferSize);
}
}
catch (Exception ex)
{ MessageBox.Show(ex.Message)
/*MessageBox.Show(ex.Message + "是否下载日志文件", "发送错误!", MessageBoxButtons.OKCancel);
//点击确定 就执行下载日志文件,不然就不执行
if (dr == DialogResult.OK)
{
WriteLog log = new WriteLog();
log.Write_log(ex.Message);
}*/
}
finally
{
if (outputStream != null)
{
outputStream.Close();
}
if (ftpResponseStream != null)
{
ftpResponseStream.Close();
} if (ftpWebResponse != null)
{
ftpWebResponse.Close();
}
}

5、具体代码如下:

namespace FtpDownLoad
{
public class ftpFileDownload
{ private string ftpIP = "*************";
private string ftpName = "2*******";
private string ftpPassword = "*********";
private string ftpRootURL = string.Empty;
FtpWebRequest reqFTP; public static void Main(string[] args)
{ ftpFileDownload ftpDown = new ftpFileDownload();
ftpDown.GetFileList("D:\testFile","37.pdt","20190703"); } /// <summary>
/// 文件下载
/// </summary>
/// <param name="localFilePath">下载路径</param>
/// <param name="fileName">下载的名称</param>
/// <param name="ftpFilePath">FTP路径</param>
/// <param name="ftpFileNameTime">FTP文件的修改时间</param> public void FtpDownLoadFile(string localFilePath, string fileName, string ftpFileNameTime)
{
FtpWebRequest ftpWebRequest = null;
FtpWebResponse ftpWebResponse = null;
Stream ftpResponseStream = null;
FileStream outputStream = null;
try
{
localFilePath = Path.Combine(localFilePath, ftpFileNameTime);
Directory.CreateDirectory(localFilePath);//创建文件夹名称
outputStream = new FileStream(Path.Combine(localFilePath, fileName), FileMode.Create);
string uri = Path.Combine(ftpRootURL, ftpIP, fileName);
ftpWebRequest = (FtpWebRequest)FileWebRequest.Create(new Uri(uri));
ftpWebRequest.Credentials = new NetworkCredential(ftpName, ftpPassword);//登录ftp
ftpWebRequest.UseBinary = true;
ftpWebRequest.Method = WebRequestMethods.Ftp.DownloadFile;
ftpWebResponse = (FtpWebResponse)ftpWebRequest.GetResponse();
ftpResponseStream = ftpWebResponse.GetResponseStream();
long contentLength = ftpWebResponse.ContentLength;
int bufferSize = 2048;
byte[] buffer = new byte[bufferSize];
int readCount;
readCount = ftpResponseStream.Read(buffer, 0, bufferSize);
while (readCount > 0)
{
outputStream.Write(buffer, 0, readCount);
readCount = ftpResponseStream.Read(buffer, 0, bufferSize);
}
}
catch (Exception ex)
{ MessageBox.Show(ex.Message);
/* DialogResult dr = MessageBox.Show(ex.Message + "是否下载日志文件", "发送错误!", MessageBoxButtons.OKCancel);
//点击确定 就执行下载日志文件,不然就不执行
if (dr == DialogResult.OK)
{
WriteLog log = new WriteLog();
log.Write_log(ex.Message);
}*/
}
finally
{
if (outputStream != null)
{
outputStream.Close();
}
if (ftpResponseStream != null)
{
ftpResponseStream.Close();
} if (ftpWebResponse != null)
{
ftpWebResponse.Close();
}
}
}

如有疑问  可以往773408602@qq.com发邮件,我会第一时间给你解答的

C#本地文件下载以及FTP文件服务下载(以Pdf文件为例)的更多相关文章

  1. 用DOS批处理实现FTP自动上传、下载、清理文件

    用DOS批处理实现FTP自动上传.下载.清理文件 最近好像特别的忙,好久没来写点东西了,今天写了一个利用批处理程序完成FTP自动上传.下载.清理文件的程序.赶紧 记录下来,以备日后之用.功能介绍:自动 ...

  2. IOS下载查看PDF文件(有下载进度)

    IOS(object-c) 下载查看 PDF 其实还是蛮容易操作的.在下载前,首先要把 IOS 可以保存文件的目录给过一遍: IOS 文件保存目录 IOS 可以自定义写入的文件目录,是很有限的,只能是 ...

  3. word和.txt文件转html 及pdf文件, 使用poi jsoup itext心得

    word和.txt文件转html 及pdf文件, 使用poi jsoup  itext心得本人第一次写博客,有上面不足的或者需要改正的希望大家指出来,一起学习交流讨论.由于在项目中遇到了这一个问题,在 ...

  4. PDF文件怎么修改,PDF文件编辑方法

    PDF文件是一种独特的文件,在日常办公中已经成为我们使用最广泛的电子文档格式.在使用PDF文件中会遇到PDF文件有错区的时候,再从新制作一个PDF文件会比较麻烦,只能通过工具来对PDF文件进行修改,这 ...

  5. 轻松将CAD文件转为加密的PDF文件

    对于从事设计相关工作的朋友来说,CAD肯定再熟悉不过了.一些有特殊要求的CAD文件,需要将其转换成为PDF文件以方便保存.传输.打印,同时还得保证设计图稿的安全性,所以将CAD文件直接转为加密的PDF ...

  6. C#将制定文件夹下的PDF文件合并成一个并输出至指定路径

    /// <summary> /// 将源路径下的PDF合并至目标路径下 /// </summary> /// <param name="SourcePath&q ...

  7. 【文件】java生成PDF文件

    package test; import java.awt.Color; import java.io.FileOutputStream; import org.junit.Test; import ...

  8. 递归找到多级文件夹中所有pdf文件的py程序

    因个人需要,写了一个可以递归找到多级文件夹中所有pdf的小程序,发布出来供有需要的人参考或使用. import os import re import shutil from os.path impo ...

  9. 从 FTP 服务器上下载并保存文件

    本例演示如何运用 C# 中的 FtpWebRequest 等对象从 FTP 服务器上获取文件,并结合 Stream 对象中的方法来保存下载的文件: using System; using System ...

随机推荐

  1. DRF Django REST framework 之 解析器(二)

    引入 Django Rest framework帮助我们实现了处理application/json协议请求的数据,如果不使用DRF,直接从 request.body 里面拿到原始的客户端请求的字节数据 ...

  2. luogu P3805 【模板】manacher算法

    题目描述 给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度. 字符串长度为n 输入格式 一行小写英文字符a,b,c...y,z组成的字符串S 输出格式 一个整数表示 ...

  3. windows系统安装git

    一.下载git的安装包 git官网的下载地址:https://git-scm.com/download/win 选择自己的机型进行安装. 二.安装配置 一直点下一步就可以 安装完毕之后,打开电脑命令窗 ...

  4. 大神带你一天了解zabbix(一)

    第15章 Zabbix的搭建 15.1 为什么使用监控服务 对系统实现不间断的监控,实现报警通知(电话,微信,邮件,发短信,手环) 实时反馈系统当前的状态信息 保证服务的可靠安全性 保证业务的稳定运行 ...

  5. 使用SQL计算宝宝每次吃奶的时间间隔(续)

    本文是<使用SQL计算宝宝每次吃奶的时间间隔>的续篇,因为我工作繁忙,时常不能及时帮助媳妇儿记录,为了让不懂数据库的媳妇儿也可以自己用手机熟练操作.我继续做了一些修正和封装: 1.给媳妇儿 ...

  6. Jquery判断当前时PC端,移动端,平板端屏幕

    $(function(){     // console.log(navigator.userAgent);     var os = function (){       var ua = navi ...

  7. PHP 7.4.0发布!一起看看有哪些新特性

    PHP 7.4.0 发布了,此版本标志着 PHP 7 系列的第四次特性更新. 看了英文手册后,发现其进行了许多改进,并带来了一些新特性,现在将这些新特性您: 1.Typed Properties 类型 ...

  8. python爬虫--爬虫介绍

    一 爬虫 1.什么是互联网? 互联网是由网络设备(网线,路由器,交换机,防火墙等等)和一台台计算机连接而成,像一张网一样 2.互联网建立的目的? 互联网的核心价值在于数据的共享/传递:数据是存放于一台 ...

  9. 谈谈redis的特性以及使用场景

    ok?先从String开始讲: String: 这是最简单的类型,就是普通的get和set,做简单的KV缓存. 但是在真实的开发环境中,很多men可能会吧很多复杂的结构也统一转成String去储存使用 ...

  10. 2016/11/10 kettle概述

    ETL(Extract-Transform-Load,即抽取,转换,加载),数据仓库技术,是用来处理将数据从来源(以前做的项目)经过抽取,转换,加载到达目的端(正在做的项目)的过程.也就是新的项目需要 ...