c# 连接ftp服务器,获取文件成功,下载失败550,求助

夺命_书生 2019-04-08 06:12:43
c#连接ftp服务器,连接获取文件夹的文件列表成功,下载单个文件和获取文件大小返回都返回550,路径正确,主动被动都失败,用FTP工具则下载正常,求助
...全文
893 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
生财 2020-12-01
  • 打赏
  • 举报
回复
楼主可以考虑换个FTP的软件试试.FTP下载文件代码类似并且很简单.
xiechengxinhemi 2020-11-30
  • 打赏
  • 举报
回复
你好 朋友 请问解决了吗 download 下载失败的问题
夺命_书生 2019-04-11
  • 打赏
  • 举报
回复
引用 8 楼 夺命_书生 的回复:
引用 6 楼 stherix 的回复:
[quote=引用 5 楼 夺命_书生 的回复:] [quote=引用 3 楼 stherix 的回复:][quote=引用 2 楼 夺命_书生 的回复:] [quote=引用 1 楼 stherix 的回复:]多半还是路径问题,检查下大小写,斜杠,空格之类的
配的路径可以获取文件列表,但是路径+文件名用来获取文件大小和下载都出错了
尝试用在地址里加上你的用户名密码看下 比如 ftp://用户名:密码@地址:端口/路径[/quote]请问ftp执行下载或获取文件流是同一个命令吗[/quote] 下载文件和获取文件流其实是一个东西吧 最终是需要GET命令来实际下载[/quote]求教[/quote]七楼内容
夺命_书生 2019-04-11
  • 打赏
  • 举报
回复
引用 6 楼 stherix 的回复:
引用 5 楼 夺命_书生 的回复:
[quote=引用 3 楼 stherix 的回复:][quote=引用 2 楼 夺命_书生 的回复:] [quote=引用 1 楼 stherix 的回复:]多半还是路径问题,检查下大小写,斜杠,空格之类的
配的路径可以获取文件列表,但是路径+文件名用来获取文件大小和下载都出错了
尝试用在地址里加上你的用户名密码看下 比如 ftp://用户名:密码@地址:端口/路径[/quote]请问ftp执行下载或获取文件流是同一个命令吗[/quote] 下载文件和获取文件流其实是一个东西吧 最终是需要GET命令来实际下载[/quote]求教
夺命_书生 2019-04-11
  • 打赏
  • 举报
回复
请问用c# FtpWebRequest类只能获取到文件列表,下载就550了,用cmd去get又正常,这是什么原因
  • 打赏
  • 举报
回复
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; using System.Configuration; namespace ScheduleTask { public class FtpTool { private static string ftpUri = ConfigurationManager.AppSettings["FtpUri"]; private static string folderPath = ConfigurationManager.AppSettings["ScheduleTaskFolder"]; private static string ftpFullDirectoryPath = Path.Combine(ftpUri, folderPath);//Ftp存储文件所在文件夹入径 private static string ftpUserID = ConfigurationManager.AppSettings["ftpUserID"]; private static string ftpPassword = ConfigurationManager.AppSettings["ftpPassword"]; public static bool Upload(string fileFullPath) { bool isSuccess = false; FileInfo fileinfo = new FileInfo(fileFullPath); string uri = Path.Combine(ftpFullDirectoryPath, fileinfo.Name);//Ftp存储文件全入径 if (!MakeDir(ftpFullDirectoryPath)) return isSuccess;//若文件夹不存在则创建 try { var tempPath = Download(uri, fileinfo.Name); if (tempPath != null) { System.Diagnostics.FileVersionInfo fileVersion1 = System.Diagnostics.FileVersionInfo.GetVersionInfo(fileFullPath); System.Diagnostics.FileVersionInfo fileVersion2 = System.Diagnostics.FileVersionInfo.GetVersionInfo(tempPath); Version v1 = new Version(fileVersion1.FileVersion != null ? fileVersion1.FileVersion : "0.0"); Version v2 = new Version(fileVersion2.FileVersion != null ? fileVersion1.FileVersion : "0.0"); if (v1 < v2) return isSuccess = true; DeleteFile(uri);//若ftp存在版本低于当前上传文件版本,则删除ftp文件 } isSuccess = true; } catch (Exception ex) { throw ex; } if (!isSuccess) return false; else isSuccess = false; FtpWebRequest ftpReq; ftpReq = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri)); ftpReq.Credentials = new NetworkCredential(ftpUserID, ftpPassword); ftpReq.KeepAlive = false; ftpReq.Proxy = null; ftpReq.Method = WebRequestMethods.Ftp.UploadFile; ftpReq.UseBinary = true; ftpReq.ContentLength = fileinfo.Length; int bufferLength = 2048; byte[] buffer = new byte[bufferLength]; int contentLen = 0; FileStream fs = fileinfo.OpenRead(); Stream stream = null; try { stream = ftpReq.GetRequestStream(); contentLen = fs.Read(buffer, 0, bufferLength); while (contentLen != 0) { stream.Write(buffer, 0, bufferLength); contentLen = fs.Read(buffer, 0, bufferLength); } stream.Close(); fs.Close(); fs.Close(); isSuccess = true; } catch (Exception ex) { if (stream != null) stream.Close(); if (fs != null) fs.Close(); throw ex; } return isSuccess; } public static string Download(string fileFullPath, string fileName) { var basePath = System.AppDomain.CurrentDomain.BaseDirectory; var tempDirectory = basePath.Substring(0,basePath.LastIndexOf(@"\")+1)+ "TempDirectory\\"; if (!Directory.Exists(tempDirectory)) Directory.CreateDirectory(tempDirectory); var tempFileFullPath = tempDirectory + fileName; if (File.Exists(tempFileFullPath)) File.Delete(tempFileFullPath); Stream stream = null; FileStream outPutStream = new FileStream(tempFileFullPath, FileMode.Create); FtpWebRequest ftpReq = null; FtpWebResponse ftpres = null; ftpReq = (FtpWebRequest)FtpWebRequest.Create(new Uri(fileFullPath)); ftpReq.Credentials = new NetworkCredential(ftpUserID, ftpPassword); ftpReq.KeepAlive = false; ftpReq.Proxy = null; ftpReq.Method = WebRequestMethods.Ftp.DownloadFile; try { ftpres = (FtpWebResponse)ftpReq.GetResponse(); stream = ftpres.GetResponseStream(); long cl = ftpres.ContentLength; int bufferSize = 2048; int readCount; byte[] buffer = new byte[bufferSize]; readCount = stream.Read(buffer, 0, bufferSize); while (readCount > 0) { outPutStream.Write(buffer, 0, bufferSize); readCount = stream.Read(buffer, 0, bufferSize); } stream.Close(); outPutStream.Close(); ftpres.Close(); } catch (Exception ex) { tempFileFullPath = null; if (stream != null) stream.Close(); if (outPutStream != null) outPutStream.Close(); if (ftpres != null) ftpres.Close(); } return tempFileFullPath; } //判断目录在ftp中是否存在 public static bool RemoteFtpDirExists(string path) { FtpWebRequest reqFtp = (FtpWebRequest)FtpWebRequest.Create(new Uri(path)); reqFtp.UseBinary = true; reqFtp.KeepAlive = false; reqFtp.Credentials = new NetworkCredential(ftpUserID, ftpPassword); reqFtp.Method = WebRequestMethods.Ftp.ListDirectory; FtpWebResponse resFtp = null; try { resFtp = (FtpWebResponse)reqFtp.GetResponse(); FtpStatusCode code = resFtp.StatusCode;//OpeningData resFtp.Close(); return true; } catch (Exception ex) { if (resFtp != null) { resFtp.Close(); } return false; } } //在ftp中创建目录 public static bool MakeDir(string dirName) { try { bool b = RemoteFtpDirExists(dirName); if (b) { return true; } FtpWebRequest reqFtp = (FtpWebRequest)FtpWebRequest.Create(new Uri(dirName)); reqFtp.UseBinary = true; reqFtp.KeepAlive = false; reqFtp.Method = WebRequestMethods.Ftp.MakeDirectory; reqFtp.Credentials = new NetworkCredential(ftpUserID, ftpPassword); FtpWebResponse response = (FtpWebResponse)reqFtp.GetResponse(); response.Close(); return true; } catch (Exception ex) { return false; } } public string[] GetFileList(string url, string method) { url = ftpUri + url; string[] downloadFiles; StringBuilder result = new StringBuilder(); try { FtpWebRequest reqFtp = (FtpWebRequest)FtpWebRequest.Create(new Uri(url)); reqFtp.UseBinary = true; reqFtp.KeepAlive = false; reqFtp.Method = method; reqFtp.Credentials = new NetworkCredential(ftpUserID, ftpPassword); WebResponse response = reqFtp.GetResponse(); StreamReader reader = new StreamReader(response.GetResponseStream(), System.Text.Encoding.UTF8);//中文文件名 string line = reader.ReadLine(); while (line != null) { result.Append(line); result.Append(" "); line = reader.ReadLine(); } if (result.Length == 0) return null; result.Remove(result.ToString().LastIndexOf(' '), 1); reader.Close(); response.Close(); return result.ToString().Split(' '); } catch (Exception ex) { downloadFiles = null; return downloadFiles; } } public static void DeleteFile(string fileName) { FtpWebRequest ftpreq = (FtpWebRequest)WebRequest.Create(fileName); ftpreq.UseBinary = true; ftpreq.Method = WebRequestMethods.Ftp.DeleteFile; ftpreq.KeepAlive = false; ftpreq.Credentials = new NetworkCredential(ftpUserID, ftpPassword); FtpWebResponse resFtp = null; try { resFtp = (FtpWebResponse)ftpreq.GetResponse(); resFtp.Close(); } catch (Exception ex) { if (resFtp != null) { resFtp.Close(); } throw ex; } } public static bool DeleteDirectory(string directoryName) { var uri = ftpUri + directoryName; FtpWebRequest ftpreq = (FtpWebRequest)WebRequest.Create(uri); ftpreq.UseBinary = true; ftpreq.Method = WebRequestMethods.Ftp.DeleteFile; ftpreq.KeepAlive = false; ftpreq.Credentials = new NetworkCredential(ftpUserID, ftpPassword); FtpWebResponse resFtp = null; try { resFtp = (FtpWebResponse)ftpreq.GetResponse(); resFtp.Close(); return true; } catch (Exception) { if (resFtp != null) { resFtp.Close(); } return fals
  • 打赏
  • 举报
回复
我有这个类,挺好用的
stherix 2019-04-09
  • 打赏
  • 举报
回复
引用 2 楼 夺命_书生 的回复:
引用 1 楼 stherix 的回复:
多半还是路径问题,检查下大小写,斜杠,空格之类的
配的路径可以获取文件列表,但是路径+文件名用来获取文件大小和下载都出错了
尝试用在地址里加上你的用户名密码看下 比如 ftp://用户名:密码@地址:端口/路径
stherix 2019-04-09
  • 打赏
  • 举报
回复
引用 5 楼 夺命_书生 的回复:
引用 3 楼 stherix 的回复:
[quote=引用 2 楼 夺命_书生 的回复:] [quote=引用 1 楼 stherix 的回复:]多半还是路径问题,检查下大小写,斜杠,空格之类的
配的路径可以获取文件列表,但是路径+文件名用来获取文件大小和下载都出错了
尝试用在地址里加上你的用户名密码看下 比如 ftp://用户名:密码@地址:端口/路径[/quote]请问ftp执行下载或获取文件流是同一个命令吗[/quote] 下载文件和获取文件流其实是一个东西吧 最终是需要GET命令来实际下载
夺命_书生 2019-04-09
  • 打赏
  • 举报
回复
引用 3 楼 stherix 的回复:
引用 2 楼 夺命_书生 的回复:
[quote=引用 1 楼 stherix 的回复:]多半还是路径问题,检查下大小写,斜杠,空格之类的
配的路径可以获取文件列表,但是路径+文件名用来获取文件大小和下载都出错了
尝试用在地址里加上你的用户名密码看下 比如 ftp://用户名:密码@地址:端口/路径[/quote]请问ftp执行下载或获取文件流是同一个命令吗
夺命_书生 2019-04-09
  • 打赏
  • 举报
回复
用地址打不开,用了ftpclient类,发现执行命令RETR 路径也是550,但是OpenRead读文件就可以读取文件,不解!
夺命_书生 2019-04-09
  • 打赏
  • 举报
回复
引用 1 楼 stherix 的回复:
多半还是路径问题,检查下大小写,斜杠,空格之类的
配的路径可以获取文件列表,但是路径+文件名用来获取文件大小和下载都出错了
stherix 2019-04-08
  • 打赏
  • 举报
回复
多半还是路径问题,检查下大小写,斜杠,空格之类的
asprain论坛是一个适合于各中小学、中专、技校、职高建设校园论坛、师生交流论坛,一些教科研部门、公司企业建设内部论坛、IT技术爱好者建设技术交流论坛的免费论坛程序。它有两个版本,分别是asp+Access版和asp+sqlServer版,功能完全一致,建站者可以根据自己的需要选用不同的版本。 Asprain论坛体积小巧,但是功能完整。它前端脚本基于jquery框架,跨浏览器性能出色。对IE6、IE7、IE8、firefox、Chrome、Saferi、Opera七种主流浏览器有良好的兼容性。可以轻松松换肤,制作个性皮肤也很方便,只要修改几个css就可以了。 asprain论坛使用了大量的ajax效果,不仅能够很有效地节省数据流量、应付网络拥堵,而且极酷的脚本动画和遮罩框效果也能使用户获得更好的应用体验。在asprain里,用户切换隐身/在线状态、更换自己的头像、版主删除水帖、加亮优秀帖等很多操作,都只要一键完成,不需要页面刷新或者跳转。asprain论坛还支持版主批量删帖、转移帖子、将帖子设为精华等等操作,并支持用户对帖子的评分、举报帖子等功能。 asprain论坛使用了一个非常独创的可视化UBB在线编辑器,实现了真正的所见即所得的UBB编辑,安全与便捷兼顾。在asprain论坛的在线编辑器中,可以做到一键插入本地图片、一键完成远程图片上传、轻松插入优酷网等视频网站上的的视频地址、插入回复可读、付费可读等标记,还可以插入程序代码。asprain论坛使用了改进版的chili插件,UBB标签[code]****[/code]能够很好地对javascript、php、asp、sql、css、html、C++、C#、Delphi、java、locus这十种开发语言进行语法高亮(这个功能对IT技术爱好者建设技术交流论坛非常有用)。 asprain论坛自带无图版、rss订阅等功能,即将推出wap版(手机版)。asprain支持滚动公告条、帖子引用通告、邮件群发、自定义论坛访问统计代码等功能,支持下载统计、支持文件反盗链、支持支付宝、财付通绑定。用户可以通过支付宝、财付通两种在线支付通道进行站内积分充值。站内积分可以用于悬赏求助、购买付费可读帖的阅读权、下载权等。这既方便了用户,也给站长增加了收入来源。 asprain自带五套漂亮的皮肤,表情和头像都非常可爱搞笑,而且可以轻松更换。网站头也可以根据需要轻松修改。asprain论坛支持多种论坛广告形式,包括页头广告、页脚广告、帖子中的文字广告、帖子右边的图片广告、全屏浮动广告、左右对联广告、页面右下角的弹出广告等。所有的广告位都支持循环轮播。也就是说,你可以在同一个广告位中插入十几条广告内容,然后前台会自动从这十几条预设广告中轮流播送。循环轮播广告比固定广告更容易抢得眼球,不易带来视觉疲劳。 如果你想学习研究asp编程技术或者jquery开发技术,也不妨来下载这个程序。 asprain论坛的后台界面也很漂亮,模仿了yeah邮件的标签功能,而且还可以搜索后台功能。 这个程序初始管理员用户名是Admin,前台密码和后台密码都是987654321。安装方法是:把下载包里的两个文件install.asp和asprain.asa解压出来,放到服务器空间根目录上,然后访问http://yourdomain/install.asp,然后填写几个表单,程序会自动把文件解压出来的。这样可以使论坛安装更方便,因为不需要再把几百个小文件通过ftp上传了,保需要把两个大文件传上去就

110,526

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧