C#FTP下載檔案出現遠程伺服器返回錯誤: (500) 語法錯誤,無法識別命令

來源:互聯網
上載者:User

標籤:

如果下載多個檔案的時候,有時候莫名其妙的出現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) 語法錯誤,無法識別命令

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.