C# 实现访问FTP服务器下载文件,获取文件夹信息小记
最近因为要开发广告制作工具,自动生成广告流,需要获取第三方服务器上的文件资源,经过摸索,从这次经历中记录下。
FtpWebRequest reqFtp;
WebResponse response = null;
//获取文件夹信息
reqFtp = (FtpWebRequest)WebRequest.Create(this.ftp);//ftp://IP:port/文件夹名1/文件夹名2/.../文件夹名
reqFtp.UseBinary = true;
reqFtp.KeepAlive = false;
reqFtp.UsePassive = false;
reqFtp.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
reqFtp.Credentials = new NetworkCredential(this.user, this.password);
response = reqFtp.GetResponse();
//下载文件
reqFtp = (FtpWebRequest)FtpWebRequest.Create((this.ftp + srcFile));//ftp://IP:port/文件夹名1/文件夹名2/.../文件名
reqFtp.UseBinary = true;
reqFtp.KeepAlive = false;
reqFtp.UsePassive = false;
reqFtp.Credentials = new NetworkCredential(this.user, this.password);
reqFtp.Method = WebRequestMethods.Ftp.DownloadFile;
response = reqFtp.GetResponse();
注意:
1.此处将reqFtp.UsePassive = false;这是因为在下载文件或者获取文件夹信息过程中出现读取中断而将其设置为false的,即出现“应PASV命令的请求,服务器返回了一个与FTP连接地址不同的地址”的异常。
2.由于本需求中还涉及到对日期的操作,因此特别要注意不同语言的操作系统的日期表示方式。
3.在需求中需要根据文件夹的修改日期进行读取最新的数据,发现获取文件夹的修改日期,当该文件夹中存在增删文件的时候,文件夹的修改日期才会变更,而文件只是覆盖是不会变更文件夹的修改日期的。