最近因為要開發廣告制作工具,自動生成廣告流,需要獲取第三方服務器上的文件資源,經過摸索,從這次經歷中記錄下。
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.在需求中需要根據文件夾的修改日期進行讀取最新的數據,發現獲取文件夾的修改日期,當該文件夾中存在增刪文件的時候,文件夾的修改日期才會變更,而文件只是覆蓋是不會變更文件夾的修改日期的。