(4)FTP服务器下载文件

上一篇中,我们提到了怎么从FTP服务器下载文件。现在来具体讲述一下。

首先是路径配置。。

所以此处我们需要一个app.config来设置路径。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>

    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
  <appSettings>
    <add key="OnlineBankRequestFolder" value ="ftp://Online/Request/" />
    <add key="OnlineBankResponseFolder" value ="ftp://Online/Response/" />
    <add key ="ftpUser" value ="fsscftp"/>
    <add key ="ftpPassword" value ="fssc123"/>
  </appSettings>
</configuration>

另外在c#中需要获取路径

public string ftpUser = ConfigurationManager.AppSettings["ftpUser"];
public string ftpPassword = ConfigurationManager.AppSettings["ftpPassword"];
public string downfolder = ConfigurationManager.AppSettings["OnlineBankRequestFolder"] + "/Request.txt";
public string savefolder = ConfigurationManager.AppSettings["OnlineBankResponseFolder"]+"/Response.xml";

然后还需要建立一个ftp请求。这时就需要建立一个ftpclient的类

  public class FtpClient
    {
        private string userName;
        private string passWord;
        private byte[] buffer = new byte[1024 * 20];


        public FtpClient(string userName, string passWord)
        {
            this.userName = userName;
            this.passWord = passWord;
        }

        /**/
        /// <summary>
        /// 创建ftp请求信息
        /// </summary>
        /// <param name="url">目标url地址</param>
        /// <param name="useBinary">是否使用二进制传输</param>
        private FtpWebRequest GetRequest(string url, bool useBinary)
        {
            FtpWebRequest ftpRequest = (FtpWebRequest)WebRequest.Create(url);
            ftpRequest.Credentials = new NetworkCredential(userName, passWord);
            ftpRequest.UseBinary = useBinary;
            ftpRequest.KeepAlive = true;
            return ftpRequest;
        }
        //下载文件
        public void DownloadFile(string localFile, string remoteFile, bool useBinary)
        {

            FtpWebRequest request = GetRequest(remoteFile, useBinary);
            request.Method = WebRequestMethods.Ftp.DownloadFile;
            try
            {
                WriteStream(request.GetResponse().GetResponseStream(),File.Create(localFile));
            }
            catch (Exception ex)
            {
                throw (ex);
            }
        }
        //将orgStream中的内容拷贝到desStream中
        private void WriteStream(Stream orgStream, Stream desStream)
        {
            int num;
            while ((num = orgStream.Read(buffer, 0, buffer.Length)) > 0)
            {
                desStream.Write(buffer, 0, num);
            }
            orgStream.Close();
            desStream.Close();
        }
    }

这个类在下载时就会用到。另外还会用到一个方法,是得到保存路径。

  public string GetDataFileSavePath()
        {
            //FTP待导入数据文件存放的路径
            string directory = savefolder;
            //if (!(Directory.Exists(directory)))
            //    Directory.CreateDirectory(directory);
            string fileName = "Cache_file.txt";
            //保存路径
            string savePath = System.IO.Path.Combine(directory, fileName);
            //if (!File.Exists(savePath))
            //    File.Create(savePath);
            return savePath;
        }
View Code

好了。准备工作完成了。现在就可以下载了。

private void FTPDown(string txtpath,string strErrMsg="",string encodingCode = "GB2312", string strSplit = "|")
{
  string savePath = downfolder;
  if(txtpath.IndexOf("ftp")>=0){
  //创建ftp请求信息
  var ftpRequest = new FtpClient(ftpUser, ftpPassword);
  savePath = GetDataFileSavePath();
  ftpRequest.DownloadFile(savePath, txtpath, true); 
  }
}

这样FTP的文件就下载到本地的一个路径下面了。

 

posted @ 2015-03-24 17:36  左魅颜  阅读(522)  评论(0编辑  收藏  举报