C#FTP下载文件出现远程服务器返回错误: (500) 语法错误,无法识别命令
生活随笔
收集整理的這篇文章主要介紹了
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 = 0;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 = 0;byte[] by = new byte[1024];int osize = st.Read(by, 0, (int)by.Length);while (osize > 0){totalDownloadedByte = osize + totalDownloadedByte;so.Write(by, 0, osize);if (prog != null){this.BeginInvoke(new MethodInvoker(delegate(){prog.Value = (int)totalDownloadedByte;}));}osize = st.Read(by, 0, (int)by.Length);percent = (float)totalDownloadedByte * 1.0f / (float)totalBytes * 100;Application.DoEvents();this.BeginInvoke(new MethodInvoker(delegate(){lbDownInfo.Text = "正在下載" + filename + ",下載進度為:" + Math.Round(percent, 2) + "%";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 = 1024;int readCount;byte[] buffer = new byte[bufferSize];readCount = ftpStream.Read(buffer, 0, bufferSize);//FTP上文件的大小int allbye = GetFtpFileSize(filename);// (int)response.ContentLength;int startbye = 0;this.BeginInvoke(new MethodInvoker(delegate(){this.prog.Maximum = allbye;this.prog.Minimum = 0;this.prog.Visible = true;this.lbDownInfo.Visible = true;}));while (readCount > 0){outputStream.Write(buffer, 0, readCount);readCount = ftpStream.Read(buffer, 0, bufferSize);startbye += readCount;this.BeginInvoke(new MethodInvoker(delegate(){this.lbDownInfo.Text = "已下載:" + (int)(startbye / 1024) + "KB/" + "總長度:"+ (int)(allbye / 1024) + "KB" + " " + " 文件名:" + filename;prog.Value = startbye;this.lbDownInfo.Refresh();}));Application.DoEvents();Thread.Sleep(5);}this.BeginInvoke(new MethodInvoker(delegate(){this.prog.Visible = false;this.lbDownInfo.Text = "下載成功!";}));ftpStream.Close();outputStream.Close();response.Close();}?
總結
以上是生活随笔為你收集整理的C#FTP下载文件出现远程服务器返回错误: (500) 语法错误,无法识别命令的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 理解浮动元素——怎么使用它们、它们有什么
- 下一篇: 图片裁剪和异步上传插件--一步到位(记录