• 【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;
            }
    
        }
    }

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

  • 相关阅读:
    使用语句修改数据表结构
    C# 写日志到文件
    mysql 语句要求
    跨discuz站获取
    php 记录图片浏览次数次数
    js获取url传递参数值
    jquery.validate.js 验证表单时,在IE当中未验证就直接提交的原因
    mkfs
    mount
    dd
  • 原文地址:https://www.cnblogs.com/lovecsharp094/p/5427349.html
Copyright © 2020-2023  润新知