C#FTP下载文件出现远程服务器返回错误: (500) 语法错误,无法识别命令
如果下载多个文件的时候,有时候莫名其妙的出现500服务器错误,很有可能是没有设置KeepAlive 属性导致的。
出现应用程序未处理的异常:2015/1/6 11:40:56
异常类型:WebException
异常消息:远程服务器返回错误: (500) 语法错误,无法识别命令。
参考:http://www.cnblogs.com/webabcd/archive/2007/01/21/626242.html
KeepAlive - 指定连接是应该关闭还是在请求完成之后关闭,默认为true
/// <summary>
/// FTP下载文件(带进度条)
/// </summary>
/// <param name="filename"></param>
public void DownloadFile(string filename)
{
float percent = ;
string filePathName = string.Empty;
string url = string.Empty;
filePathName = Path.Combine(Application.StartupPath, filename);
string dirPath = GetDirPath(filePathName);
if (!Directory.Exists(dirPath))
Directory.CreateDirectory(dirPath);
//=>替换文件目录中的路径为网络路径
filename = filename.Replace("\\", "/");
url = "ftp://" + clientUpdateInfo.UpdateFTPIP + "/" + clientUpdateInfo.UpdatePath + "/" + filename;
var reqFtp = (FtpWebRequest)FtpWebRequest.Create(new Uri(url));
reqFtp.Method = WebRequestMethods.Ftp.DownloadFile;
reqFtp.UseBinary = true;
reqFtp.KeepAlive = false;//一定要设置此属性,否则一次性下载多个文件的时候,会出现异常。
reqFtp.Credentials = new NetworkCredential(clientUpdateInfo.FtpUserName, clientUpdateInfo.FtpUserPwd);
var response = (FtpWebResponse)reqFtp.GetResponse();
long totalBytes = response.ContentLength;
if (prog != null)
{
this.BeginInvoke(new MethodInvoker(delegate()
{
prog.Maximum = (int)totalBytes;
}));
}
Stream st = response.GetResponseStream();
var so = new FileStream(filePathName, FileMode.Create);
long totalDownloadedByte = ;
byte[] by = new byte[];
int osize = st.Read(by, , (int)by.Length);
while (osize > )
{
totalDownloadedByte = osize + totalDownloadedByte;
so.Write(by, , osize);
if (prog != null)
{
this.BeginInvoke(new MethodInvoker(delegate()
{
prog.Value = (int)totalDownloadedByte;
})); }
osize = st.Read(by, , (int)by.Length);
percent = (float)totalDownloadedByte * 1.0f / (float)totalBytes * ;
Application.DoEvents();
this.BeginInvoke(new MethodInvoker(delegate()
{
lbDownInfo.Text = "正在下载" + filename + ",下载进度为:" + Math.Round(percent, ) + "%";
lbDownInfo.Refresh();
}));
Application.DoEvents();
}
so.Close();
st.Close();
response.Close();
} private void FtpDownload(string filename)
{
string filePathName = string.Empty;
string url = string.Empty;
filePathName = Path.Combine(Application.StartupPath, filename);
string dirPath = GetDirPath(filePathName);
if (!Directory.Exists(dirPath))
Directory.CreateDirectory(dirPath);
//=>替换文件目录中的路径为网络路径
filename = filename.Replace("\\", "/");
url = "ftp://" + clientUpdateInfo.UpdateFTPIP + "/" + clientUpdateInfo.UpdatePath + "/" + filename;
FtpWebRequest reqFTP;
this.BeginInvoke(new MethodInvoker(delegate()
{
this.lbDownInfo.Text = "开始下载中...";
}));
FileStream outputStream = new FileStream(filePathName, FileMode.Create);
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(url));
reqFTP.Credentials = new NetworkCredential(clientUpdateInfo.FtpUserName, clientUpdateInfo.FtpUserPwd);
reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
reqFTP.UseBinary = true;
reqFTP.KeepAlive = false; FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
Stream ftpStream = response.GetResponseStream();
int bufferSize = ;
int readCount;
byte[] buffer = new byte[bufferSize];
readCount = ftpStream.Read(buffer, , bufferSize);
//FTP上文件的大小
int allbye = GetFtpFileSize(filename);// (int)response.ContentLength;
int startbye = ;
this.BeginInvoke(new MethodInvoker(delegate()
{
this.prog.Maximum = allbye;
this.prog.Minimum = ;
this.prog.Visible = true;
this.lbDownInfo.Visible = true;
}));
while (readCount > )
{
outputStream.Write(buffer, , readCount);
readCount = ftpStream.Read(buffer, , bufferSize);
startbye += readCount;
this.BeginInvoke(new MethodInvoker(delegate()
{
this.lbDownInfo.Text = "已下载:" + (int)(startbye / ) + "KB/" + "总长度:"
+ (int)(allbye / ) + "KB" + " " + " 文件名:" + filename;
prog.Value = startbye;
this.lbDownInfo.Refresh();
}));
Application.DoEvents();
Thread.Sleep();
}
this.BeginInvoke(new MethodInvoker(delegate()
{
this.prog.Visible = false;
this.lbDownInfo.Text = "下载成功!";
}));
ftpStream.Close();
outputStream.Close();
response.Close();
}
C#FTP下载文件出现远程服务器返回错误: (500) 语法错误,无法识别命令的更多相关文章
- C#操作FTP报错,远程服务器返回错误:(550)文件不可用(例如,未找到文件,无法访问文件)的解决方法
最近在做项目的时候需要操作ftp进行文件的上传下载,但在调用using (var response = (FtpWebResponse)FtpWebRequest.GetResponse())的时候总 ...
- C# FTP远程服务器返回错误:(550) 文件不可用(例如,未找到文件,无法访问文件)
今天用代码删除FTP服务器上的目录时候,报错:远程服务器返回错误:(550) 文件不可用(例如,未找到文件,无法访问文件). 习惯性的google,不外乎以下几点: 1.URL路径不对,看看有没有多加 ...
- 写自动更新程序出现"远程服务器返回错误: (404) 未找到"
在win2003配置后,在客户端运行时能够下载exe和dll文件,但是在更新lib文件时总是报“远程服务器返回错误: (404) 未找到”错误,不明白咋会出现这个问题,去网上一查,发现以下解决办法: ...
- .Net 连接FTP下载文件报错:System.InvalidOperationException: The requested FTP command is not supported when using HTTP proxy
系统环境: Windows + .Net Framework 4.0 问题描述: C#连接FTP下载文件时,在部分电脑上有异常报错,在一部分电脑上是正常的:异常报错的信息:System.Inval ...
- 安装SSH2拓展 PHP上传文件到远程服务器
情景:客户端上传图片到服务器A,服务器A同步上传至另外一个静态资源服务器B 环境:php7 linux(ubuntu) 安装php的ssh2扩展 -dev sudo apt-get install p ...
- C# 上传文件至远程服务器
C# 上传文件至远程服务器(适用于桌面程序及web程序) 2009-12-30 19:21:28| 分类: C#|举报|字号 订阅 最近几天在玩桌面程序,在这里跟大家共享下如何将本地文件上传 ...
- system.net.webexception远程服务器返回了错误: NotFound。
Not Found类的错误主要是由于网络服务访问出错.所以需要分析是由哪个网络服务访问失败而导致的. DataAccessSilverlight.PowerDataServiceReference.G ...
- fft 远程服务器返回错误 550返回码
"远程服务器返回错误:(550) 文件不可用(例如,未找到文件,无法访问文件)"时,可能是如下原因: 1.URL路径不对,看看有没有多加空格,或者大小写问题 2.权限是否足 3.需 ...
- SSH命令行传输文件到远程服务器
Ubuntu操作系统 SCP命令 使用方式如下: 1.上传本地文件到远程服务器 scp /var/www/test.php root@192.168.0.101:/var/www/ 把本机/var/w ...
随机推荐
- 使用Nodejs+mongodb开发地图瓦片服务器
原先地图瓦片服务器采用的是arcgisserver发布的地图服务并进行切片,但ags发布的地图服务很占内存,发布太多的话服务器压力很大.再一个就是ags价太高了. 学习Nodejs之后,发现这是一个可 ...
- 【PHP入门到精通】:Ch04:流程控制语句
Ch04: 流程控制语句4.1 条件控制语句(1)if (expr) { statement1;statement2;} (2)if (expr) { statement1; } else { s ...
- JS判断是不是本页面并且,给标签添加属性和属性值
大多是在导航栏中用到的,在导航栏中在主页和在其他的网页点击导航栏中的主页是不同的,主要就是判断这个. 我是在ascs页面中写的. 下面先看标签: <a href="http://www ...
- C语言的 (强制类型转换) 以及 '字符字面值'
C语言的显式/隐式类型转换,都有一个中间变量的存在,原数据的类型.内容都不变. 以下代码,都用GCC编译. #include<stdio.h> int main() { char c = ...
- [python]Python操作MySQL
[安装] 安装MySQL 安装MySQL不用多说了,下载下来安装就是,没有特别需要注意的地方. 一个下载地址:点击打开链接 [样例] ? 1 2 3 4 5 6 7 8 9 10 11 12 13 1 ...
- 【Python学习笔记】字符串操作
字符串的表示 python中的字符串是一个常量,可以使用单引号'',双引号""或三引号""" """来创建一个字符串常量 ...
- hadoop2.6.0 --- 64位源代码
今天有朋友在群里找hadoop最新的2.6.0的源代码,其实这个源代码在hadoop的官方网站是有下载的(应该是32位的),还有一个src,不过给的是maven版本,需要自己在机器上编译一下(我的机器 ...
- 使用Ambari部署hadoop集群
准备工作 1. 设置sudo免密码登陆 由于CentOS安装之后,普通用户无sudo权限,故应该设置sudo权限. 参考文章:http://www.cnblogs.com/maybob/p/32988 ...
- noip模拟赛 软件software
地图上的 n个城市,由 n-1条道路连接,且任意两个城市连通.除 1号城市之外的每个都有 一台计算机,安装软件号城市之外的每个都有 一台计算机,安装软件一个 自己的安装时间.住在 1号城市的蒟蒻要给这 ...
- rabbitMQ 远程访问
AMQP server localhost:5672 closed the connection. Check login credentials: Socket closed root@ruiy-c ...