C#【FTP】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;
        }

    }
}

 注意:即使存放在服务器的文书是身处根目录下,那么服务器路径只需填写“/”,即可。

相关文章