你的位置:首页 > ASP.net教程

[ASP.net教程]C# System.Net.FtpClient库连接ftp服务器(下载文件)


如果自己单枪匹马写一个连接ftp服务器代码那是相当恐怖的(socket通信),有一个评价较高的dll库可以供我们使用。

那就是System.Net.FtpClient,链接地址:https://netftp.codeplex.com

然后下载该资源,我们就可以使用它的函数了。这里介绍一下如何使用System.Net.FtpClient链接ftp服务器并下载服务器中的文件。

千万别忘了添加引用——导入System.Net.FtpClient.dll.

还有就是 using System.Net.FtpClient;

            using System.Net;

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Net;using System.Net.FtpClient;using System.Text;using System.Threading.Tasks;using System.IO;namespace FTP_Client{  public class FTPConnection  {        public FTPConnection() { }    /// <summary>    /// 连接FTP服务器函数    /// </summary>    /// <param name="strServer">服务器IP</param>    /// <param name="strUser">用户名</param>    /// <param name="strPassword">密码</param>    public bool FTPIsConnected(string strServer, string strUser, string strPassword)    {      using (FtpClient ftp = new FtpClient())      {        ftp.Host = strServer;        ftp.Credentials = new NetworkCredential(strUser, strPassword);        ftp.Connect();        return ftp.IsConnected;      }    }        /// <summary>    /// FTP下载文件    /// </summary>    /// <param name="strServer">服务器IP</param>    /// <param name="strUser">用户名</param>    /// <param name="strPassword">密码</param>    /// <param name="Serverpath">服务器路径,例子:"/Serverpath/"</param>    /// <param name="localpath">本地保存路径</param>    /// <param name="filetype">所下载的文件类型,例子:".rte"</param>    public bool FTPIsdownload(string strServer, string strUser, string strPassword,string Serverpath, string localpath, string filetype)    {            FtpClient ftp = new FtpClient();      ftp.Host = strServer;      ftp.Credentials = new NetworkCredential(strUser, strPassword);      ftp.Connect();      string path = Serverpath;      string destinationDirectory = localpath;      List<string> documentname = new List<string>();      bool DownloadStatus = false;      if (Directory.Exists(destinationDirectory))      {        #region 从FTP服务器下载文件        foreach (var ftpListItem in ftp.GetListing(path, FtpListOption.Modify | FtpListOption.Size)         .Where(ftpListItem => string.Equals(Path.GetExtension(ftpListItem.Name), filetype)))        {          string destinationPath = string.Format(@"{0}\{1}", destinationDirectory, ftpListItem.Name);          using (Stream ftpStream = ftp.OpenRead(ftpListItem.FullName))          using (FileStream fileStream = File.Create(destinationPath, (int)ftpStream.Length))          {            var buffer = new byte[200 * 1024];            int count;            while ((count = ftpStream.Read(buffer, 0, buffer.Length)) > 0)            {              fileStream.Write(buffer, 0, count);            }          }          documentname.Add(ftpListItem.Name);        }        #endregion        #region 验证本地是否有该文件        string[] files = Directory.GetFiles(localpath, "*"+filetype);        int filenumber = 0;        foreach(string strfilename in files)        {                    foreach(string strrecievefile in documentname)          {            if (strrecievefile == Path.GetFileName(strfilename))            {              filenumber++;              break;            }          }        }        if(filenumber==documentname.Count)        {          DownloadStatus = true;        }               #endregion      }           return DownloadStatus;    }  }}