中易网

C#通过FTP下载文件夹

答案:3  悬赏:0  
解决时间 2021-02-17 19:18
如题,如何用C#代码,来下载FTP上的某个文件夹所有的东西呢?是文件夹,不是文件哦,大虾们多指点!!
最佳答案
下载FTP上的某个文件夹所有的东西呢?是文件夹,不是文件哦,”你是不是很矛盾?文件夹只是一个符号,最终的目的是文件是不是?遍历,然后用socket,
全部回答
有两个方法:1.文件夹打包成ZIP下载 2.在选择的下载目录下创建一个和FTP一样的目录,然后便利FTP上文件夹里所有的文件,然后下载到你创建的文件夹下面
第一部分是实现单个文件下载的方法          /// <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方法中
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
红铜乾隆通宝价格?
人民公社大草锅马厂总店地址在哪,我要去那里
哪种古筝义甲音色好?
洛奇英雄传找不到燃烧的村子
我这样的算是恶媳妇吗?
如何让青春期的女孩子在一个月长高2厘米视频
微信上聊天被骗一万报警能不能找回来
邻水县财政局张文要判多少年
和want to be一样意思的词组有哪些?
哪个模特穿过VERA WANG的婚纱
LeeYeJi和OhEungYeong是韩语拼音 请问 中文意
尿到马桶时好像有糖分在溶解是怎么回事
为什么大家认为海航集团债务违约不可信?
日月每从肩上过,山河但在掌中看 的出处
怎么看宝宝五行缺什么 出生时间 2018 年10 月
推荐资讯
一对男女不是夫妻住在公司宿舍被人砍了跟公司
请问EDX测试仪有辐射吗?
为什么2016年征地却用2008年的土地赔偿标准?
施工现场工人从电梯井坠落事故报告要怎么办
《奔跑吧兄弟》2015最新一期“碟中谍”第二项
时间廊有没有买500元港币左右的手表啊?
朋友的信任阅读答案
光绪元宝当制钱十文浙江省造哪里有人直接收购
IP地址块202.113.79.0/27,202.113.79.32/27和
怎样把苹果手机微信误删的聊天记录恢复
问: [image]20 哪位兄弟帮我用凯立德激活码算
说服的读音。
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?