从 FTP 服务器上下载并保存文件
本例演示如何运用 C# 中的 FtpWebRequest 等对象从 FTP 服务器上获取文件,并结合 Stream 对象中的方法来保存下载的文件:
using System;
using System.IO;
using System.Net; namespace ConsoleApp
{
class Program
{
static void Main()
{
FtpWebRequest reqFtp = null;
FtpWebResponse responseFtp = null;
Stream stream = null; //ftp服务器信息
string ftpFilePath = "ftp://200.16.220.100/test.xls";
string ftpAccount = "sa";
string ftpPassword = "psd123";
string localFilePath = @"d:\test.xls"; try
{
//初始化FtpWebRequest对象
reqFtp = (FtpWebRequest)WebRequest.Create(new Uri(ftpFilePath));
reqFtp.Timeout = * * ;
reqFtp.Method = WebRequestMethods.Ftp.DownloadFile;
reqFtp.UseBinary = true;
reqFtp.UsePassive = true;
reqFtp.EnableSsl = false;
reqFtp.Credentials = new NetworkCredential(ftpAccount, ftpPassword);
responseFtp = (FtpWebResponse)reqFtp.GetResponse();
stream = responseFtp.GetResponseStream(); //保存文件到本地磁盘
SaveFile(localFilePath, stream);
}
catch (Exception ex)
{
Console.WriteLine("Exception: " + ex.Message);
}
} /// <summary>
/// 把文件流中的数据写入到文件中
/// </summary>
/// <param name="fileFullPath">文件的绝对路径</param>
/// <param name="inputStream">文件流</param>
public static void SaveFile(string fileFullPath, Stream inputStream)
{
using (FileStream fileStream = new FileStream(fileFullPath, FileMode.OpenOrCreate, FileAccess.Write))
{
using (BufferedStream buffStream = new BufferedStream(inputStream))
{
int buffSize = ;
byte[] buff = new byte[buffSize]; //将字节从当前缓冲流读取到数组
int readCount = ;
readCount = buffStream.Read(buff, , buffSize); while (readCount > )
{
//将字节块写入文件流
fileStream.Write(buff, , readCount);
//由于读到流的最后一段时,流会自动关闭
//这里需要判断流是否可读,
//若不可读,说明读完了最后一段,可以结束
if (buffStream.CanRead)
{
readCount = buffStream.Read(buff, , buffSize);
}
else
{
readCount = ;
break;
}
}
} //清除此流的缓冲区,使得所有缓冲的数据都写入到文件中
fileStream.Flush();
//关闭当前流并释放与之关联的所有资源(如套接字和文件句柄)
fileStream.Close();
}
}
}
}
下面的方法用于判断文件目录是否存在,如果不存在就新建目录:
private static Boolean FtpMakeDir(string ftpServerIP, string ftpUserID, string ftpPassword, string localFile)
{
FtpWebRequest req = (FtpWebRequest)WebRequest.Create(new Uri("ftp://" + ftpServerIP + localFile));
req.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
req.Method = WebRequestMethods.Ftp.MakeDirectory;
try
{
FtpWebResponse response = (FtpWebResponse)req.GetResponse();
response.Close();
}
catch (Exception ex)
{
req.Abort();
return false;
}
finally
{
req.Abort();
}
return true;
}
参考资源:
https://msdn.microsoft.com/en-us/library/system.net.ftpwebrequest(v=vs.110).aspx
http://bbs.csdn.net/topics/390627456
从 FTP 服务器上下载并保存文件的更多相关文章
- .Net 上传文件到ftp服务器和下载文件
突然发现又很久没有写博客了,想起哎呦,还是写一篇博客记录一下吧,虽然自己还是那个渣渣猿. 最近在做上传文件的功能,上传到ftp文件服务器有利于管理上传文件. 前面的博客有写到layui如何上传文件,然 ...
- java实现读取ftp服务器上的csv文件
定义ftp操作接口 import java.io.InputStream; import java.util.List; import org.apache.commons.net.ftp.FTPCl ...
- 将文件夹上传到FTP服务器,遍历上传,,,文件夹不能直接上传到FTP服务器上。。。
<? $ftp_ip = "FTP"; $ftp_user = "user"; $ftp_pwd = "password"; $con ...
- 使用批处理文件在FTP服务器 上传下载文件
1.从ftp服务器根目录文件夹下的文件到指定的文件夹下 格式:ftp -s:[配置文件] [ftp地址] 如:ftp -s:c:\vc\ftpconfig.txt 192.168.1.1 建立一个 ...
- Spring学习---Spring中利用组件实现从FTP服务器上传/下载文件
FtpUtil.java import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundExcepti ...
- JAVA通过FTP方式向远程服务器或者客户端上传、下载文件,以及删除FTP服务器上的文件
1.在目标服务器上搭建FTP服务器 搭建方式有多种大家可以自行选择,例如使用Serv-U或者FTPServer.exe:这里我以FTPServer.exe为例搭建:在目标服务器(这里对应的IP是10. ...
- FTP服务器上传,下载文件
public class FtpUtil { /** * * @param host FTP服务器地址 * @param port FTP服务器端口 * @param username FTP登录账号 ...
- 【FTP】C# System.Net.FtpClient库连接ftp服务器(上传文件)
如果自己单枪匹马写一个连接ftp服务器代码那是相当恐怖的(socket通信),有一个评价较高的dll库可以供我们使用. 那就是System.Net.FtpClient,链接地址:https://net ...
- 使用SAXReader读取ftp服务器上的xml文件(原创)
根据项目需求,需要监测ftp服务器上的文件变化情况,并将新添加的文件读入项目系统(不需要下载). spring配置定时任务就不多说了,需要注意的一点就是,现在的项目很多都是通过maven构建的,分好多 ...
随机推荐
- JDBC操作MySQL出现:This result set must come from a statement that was created with a result set type of ResultSet.CONCUR_UPDATABLE, ...的问题解决
错误如下: This result set must come from a statement that was created with a result set type of ResultSe ...
- anaconda是个啥?
Anaconda具有跨平台(win/mac/linux).包管理(类似于pip).环境管理(类似于virtualenv)的特点,因此很适合快速在新的机器上部署Python环境 Anaconda利用工具 ...
- 当遇到Mac的Excel或者Word老是重复崩溃的时候
打开Number,新建文件然后导出为Excel.之后再用Excel打开,一切都OK了.
- 一句话创建Jupyter For TensorFlow
docker run -v /home/jupyter_files:/home/jovyan/work -it -d --rm -p 10082:8888 jupyter/tensorflow-not ...
- android 深入浅出 群内“每日一问” 问答总结
永远不变的就是变. 俗话说的好,环境改变人生. 常常面对的是一群积极奋进的人,那么你的心态和生活也会变的充满斗志.青春在于折腾,趁我们还年轻,拿出你的激情.踏着泪水载着梦,才干拥有自己的一片天空. 上 ...
- Flink内存管理源代码解读之基础数据结构
概述 在分布式实时计算领域,怎样让框架/引擎足够高效地在内存中存取.处理海量数据是一个非常棘手的问题.在应对这一问题上Flink无疑是做得非常杰出的,Flink的自主内存管理设计或许比它自身的知名度更 ...
- 百度知道的代码复制粘贴到VB没有换行怎么办
在如下所示的网页中,复制 粘贴到word文档,换行还是有的 再复制到VB6.0中还是可用的
- css的white-space属性导致了空格问题——查看十六进制发现2020变成了c2a0
今天发现了一个奇怪的问题.从文本编辑器(notepad++)中把一段文本输入到easyui的textbox文本框(textarea)中,不进行不论什么的操作.直接再从文本框中把文本拷贝出来贴到文本编译 ...
- 让你完全理解base64是怎么回事
HTTP将BASE64-编码用于基本认证和摘要认证,在几种HTTP扩展中也使用了该编码. Base-64编码保证了二进制数据的安全 Base-64编码可以将任意一组字节转换为较长的常见文本字符序列,从 ...
- Lvs 负载均衡 (VS/NAT模式)
一.LVS简介 LVS是 Linux Virtual Server 的简称,也就是Linux虚拟服务器.这是一个由章文嵩博士发起的一个开源项目,它的官方网站是 http://www.linuxvirt ...