从 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构建的,分好多 ...
随机推荐
- hdu - 1627 Krypton Factor (dfs)
http://acm.hdu.edu.cn/showproblem.php?pid=1627 给定 n 和 L 找出第n个范围在0-L之内的字符串,字符串要求没有相邻的子串是相同的. 按照格式输出. ...
- 网页js粘贴截图
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- Critical Links-UVa796(无向图求桥)
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- java反射与注解结合使用(根据传入对象输出查询sql)
我们在项目开发中有很多地方使用到了注解,关于注解的定义与创建小伙伴可以参考我的文章<java注解>.有任何问题的小伙伴们可以在评论区指出哦,欢迎各位大佬指出问题. 今天我要说的是使用注解与 ...
- spring boot file上传
用Spring Boot写读取Excel文件小工具的时候遇到的一些小坑已经填平,复制即可满足普通的文件上传功能POI方面只需一个包,其他通用包工程中一般都会带TIPS:前端为了扩展我用ajax异步请求 ...
- JSP的隐藏对象
以下内容引用自http://wiki.jikexueyuan.com/project/jsp/implicit-objects.html: JSP隐式对象是Java对象,JSP容器使隐式对象在每一个页 ...
- 物理内存、虚拟内存、buffers、cached、共享内存、swap
物理内存: 实际使用的内存: 虚拟内存: 虚拟内存是操作系统内核为了对进程地址空间进行管理(process address space management)而精心设计的一个逻辑意义上的内存空间概念. ...
- linux 下 打包 和解压缩
01-.tar格式解包:[*******]$ tar xvf FileName.tar打包:[*******]$ tar cvf FileName.tar DirName(注:tar是打包,不是压缩! ...
- 【转】C++ 进程间的通讯(一):简单的有名管道实现
原文: C++ 进程间的通讯(一):简单的有名管道实现 -------------------------------------------------- 进程间的通讯(一):简单的有名管道实现 ...
- Word Break II 求把字符串拆分为字典里的单词的全部方案 @LeetCode
这道题相似 Word Break 推断能否把字符串拆分为字典里的单词 @LeetCode 只不过要求计算的并不不过能否拆分,而是要求出全部的拆分方案. 因此用递归. 可是直接递归做会超时,原因是Le ...