第一次張貼海報,長期閱讀。我有一個非常討厭的問題,這讓我感到很緊張。我已經安裝了一個程序,以便在FTP服務器上偵聽新文件,如果這是我下載的新文件。從那裏我開始處理文件中的一些信息等。當我第二次運行我的序列時,我的問題就出現了。也就是說,在我下載的第一個文件中,一切都很完美,但是一旦檢測到新文件並且我的程序嘗試下載它,我的程序就會掛起。程序掛在FtpWebResponse
private static void DownloadFile(string s)
{
try
{
FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://blabla.com/"+s);
request.Method = WebRequestMethods.Ftp.DownloadFile;
request.Credentials = new NetworkCredential("xxx" ,"zzz");
using (FtpWebResponse partResponse = (FtpWebResponse)request.GetResponse())
{
Stream partReader = partResponse.GetResponseStream();
byte[] buffer = new byte[1024];
FileInfo fi = new FileInfo(path);
FileStream memStream = fi.Create();
while (true)
{
int bytesRead = partReader.Read(buffer, 0, buffer.Length - 1);
if (bytesRead == 0)
break;
memStream.Write(buffer, 0, bytesRead);
}
partResponse.Close();
memStream.Close();
}
Console.WriteLine(DateTime.Now + " file downloaded");
MoveFileToInProgress(s);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
它掛在該生產線是這一個: 使用(FtpWebResponse partResponse =(FtpWebResponse)request.GetResponse())
的原因就在這裏我的方法是靜態的,是因爲我只是運行它在不同的項目來測試它..我的問題是,它怎麼只死在第二個文件?我一直盯着自己幾個小時了!
我程序仍然掛在同一行上,在你的代碼中它轉換爲這一行:using(Stream strm = ftp.GetResponse()。GetResponseStream())我想我將不得不去尋找我沒有正確關閉FTP連接的地方,東西.. – MartinNielsen 2011-06-03 06:15:04
你可以嘗試讓計時器在幾秒鐘內斷開和/或重試(如果procces需要更長的時間,則更長) – Daanvl 2011-09-02 14:41:50
你有沒有想過這個?我的代碼也掛在最後幾個字節 – 2013-04-03 12:02:41