C#通过FTP下载文件夹

如题,如何用C#代码,来下载FTP上的某个文件夹所有的东西呢?是文件夹,不是文件哦,大虾们多指点!!... 如题,如何用C#代码,来下载FTP上的某个文件夹所有的东西呢?是文件夹,不是文件哦,大虾们多指点!! 展开
 我来答
xiangjuan314
2016-01-06 · TA获得超过3.3万个赞
知道大有可为答主
回答量:2.9万
采纳率:0%
帮助的人:2811万
展开全部

第一部分是实现单个文件下载的方法 

        /// <summary>
        /// 单个文件下载方法
         /// </summary>
        /// <param name="adss">保存文件的本地路径</param>
        /// <param name="ftpadss">下载文件的FTP路径</param>
        public void download(string adss, string ftpadss)
        {
            //FileMode常数确定如何打开或创建文件,指定操作系统应创建新文件。
            //FileMode.Create如果文件已存在,它将被改写
            FileStream outputStream = new FileStream(adss, FileMode.Create);
            FtpWebRequest downRequest = (FtpWebRequest)WebRequest.Create(new Uri(ftpadss));
            //设置要发送到 FTP 服务器的命令
            downRequest.Method = WebRequestMethods.Ftp.DownloadFile;
            FtpWebResponse response = (FtpWebResponse)downRequest.GetResponse();
            Stream ftpStream = response.GetResponseStream();
            long cl = response.ContentLength;
            int bufferSize = 2048;
            int readCount;
            byte[] buffer = new byte[bufferSize];
            readCount = ftpStream.Read(buffer, 0, bufferSize);
            while (readCount > 0)
            {
                outputStream.Write(buffer, 0, readCount);
                readCount = ftpStream.Read(buffer, 0, bufferSize);
            }
            ftpStream.Close();
            outputStream.Close();
            response.Close();
        }

第二个部分也就是需要遍历出所指定的文件夹内所有内容

首先是一个单个遍历文件夹获取文件夹下所有文件信息的方法  

  /// </summary>
        /// <param name="ftpads">FTP地址路径</param>
        /// <param name="name">我们所选择的文件或者文件夹名字</param>
        /// <param name="type">要发送到FTP服务器的命令</param>
        /// <returns></returns>
        public string[] ftp(string ftpads,string name,string type)
        {
            WebResponse webresp = null;
            StreamReader ftpFileListReader = null;
            FtpWebRequest ftpRequest=null;
            try
            {
                 ftpRequest = (FtpWebRequest)WebRequest.Create(new Uri(ftpads + name));
                 ftpRequest.Method = type;
                 webresp = ftpRequest.GetResponse();
                 ftpFileListReader = new StreamReader(webresp.GetResponseStream(), Encoding.Default);
            }
            catch(Exception ex)
            {
                ex.ToString();
                
            }
            StringBuilder str = new StringBuilder();
            string line=ftpFileListReader.ReadLine();
            while (line != null)
            {
                str.Append(line);
                str.Append("/n");
                line = ftpFileListReader.ReadLine();
            }
            string[] fen = str.ToString().Split('/n');
            return fen;
        }

之后是一个我们实现递归文件夹的方法 

       

/// <summary>
        /// 下载方法KO
        /// </summary>
        /// <param name="ftpads">FTP路径</param>
        /// <param name="name">需要下载文件路径</param>
        /// <param name="Myads">保存的本地路径</param>
        public void downftp(string ftpads, string name,string Myads)
        {
            string downloadDir = Myads + name;
            string ftpdir = ftpads + name;
            string[] fullname = ftp(ftpads, name, WebRequestMethods.Ftp.ListDirectoryDetails);
            //判断是否为单个文件 
            if (fullname.Length <= 2)
            {
                if (fullname[fullname.Length - 1] == "")
                {
                    download(downloadDir + "/" + name, ftpads + name + "/" + name);
                }
            }
            else
            {
                string[] onlyname = ftp(ftpads, name, WebRequestMethods.Ftp.ListDirectory);
                if (!Directory.Exists(downloadDir))
                {
                    Directory.CreateDirectory(downloadDir);
                }
                foreach (string names in fullname)
                {
                    //判断是否具有文件夹标识<DIR>
                    if (names.Contains("<DIR>"))
                    {
                        string olname = names.Split(new string[] { "<DIR>" }, 
                        StringSplitOptions.None)[1].Trim();
                        downftp(ftpdir, "//" + olname, downloadDir);
                    }
                    else
                    {
                        foreach (string onlynames in onlyname)
                        {
                            if (onlynames == "" || onlynames == " " || names == "")
                            {
                                break;
                            }
                            else
                            {
                                if (names.Contains(" " + onlynames))
                                {
                                    download(downloadDir + "/" + onlynames, ftpads + name + "/" + 
                                    onlynames);
                                    break;
                                }
                            }
                        }
                    }
                }
            }
            
        }

       在使用WebRequestMethods.Ftp.ListDirectoryDetails取得文件夹下所有内容时,会发现如果其中有文件夹,那么文件夹的的详细信息中会有一个"<DIR>"标识,我们就可以通过这个来将其区分开来

      同时在获取文件夹以及文件名称时用到WebRequestMethods.Ftp.ListDirectory,这个指令能过只获得文件夹下所有文件包括文件夹的名字,通过这两个指令所获取的信息逐一比较,便能确定出文件或文件夹名以传递到download和downftp方法中

镭速传输
2024-10-28 广告
在深圳市云语科技有限公司,我们深知远程传输大文件的重要性与便捷性。为此,我们推荐使用高效的文件传输服务,这些服务通常支持断点续传,确保大文件传输的稳定与安全。用户只需简单上传,系统即可自动处理,无论文件大小,都能实现快速、可靠的远程传输。同... 点击进入详情页
本回答由镭速传输提供
q84201088
2014-04-17
知道答主
回答量:15
采纳率:0%
帮助的人:7.4万
展开全部
有两个方法:1.文件夹打包成ZIP下载
2.在选择的下载目录下创建一个和FTP一样的目录,然后便利FTP上文件夹里所有的文件,然后下载到你创建的文件夹下面
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
plersworld
2014-04-17 · 超过33用户采纳过TA的回答
知道答主
回答量:142
采纳率:0%
帮助的人:80.8万
展开全部
下载FTP上的某个文件夹所有的东西呢?是文件夹,不是文件哦,”你是不是很矛盾?文件夹只是一个符号,最终的目的是文件是不是?遍历,然后用socket,
追问
。。。就是文件夹里面的所有文件些一起下载下来的
追答

C# FTP .Net 2.0 的源码,你看一下,对你有帮助的

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式