2010-01-26 70 views
1

我正在使用C#將某些文件上傳到FTP服務器。如果文件已經存在,FtpWebRequest超時,所以我想先刪除它。通過FTP刪除文件的問題

但WebRequestMethods.Ftp.DeleteFile也總是超時。難道我做錯了什麼?

這裏是我的代碼:

FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(address); 

request.Credentials = new NetworkCredential(Username, Password); 
request.KeepAlive = false; 
request.Method = WebRequestMethods.Ftp.DeleteFile; 

try 
{ 
    FtpWebResponse resp = (FtpWebResponse)request.GetResponse(); 
} 
catch (Exception e) 
{ 
    ...   
} 

編輯:哦,沒關係,我試圖刪除文件巫婆。只要文件存在,請求就會一直超時。如果該文件不存在,則拋出不同的異常。

沒有什麼是錯的憑據,我可以做其他操作(上傳/下載沒有問題)。另外它不是一個服務器問題,如果我用一個具有相同用戶名的客戶端(FileZilla)連接它,它會按照它應該的那樣工作。

謝謝你的幫助。

+0

你想刪除一個不存在的文件嗎? – PeanutPower 2010-01-26 12:06:03

+0

@PeanutPower:不,情況並非如此。如果我嘗試刪除不存在的文件,則會拋出不同的異常(響應550) – 2010-01-26 13:01:21

+0

可能是文件上的鎖定?你可以用另一個客戶端手動刪除它嗎? – PeanutPower 2010-01-26 12:04:35

回答

1

我發現通過FtpWebRequest使用這個Ftp的東西,本質上是慢很多(因爲它使用HTTP協議通過端口80),它讓我發瘋,因爲FileZilla可以更快地做到這一點(顯然通過端口20/21使用FTP協議)。有一個開源的ftp組件發現here,我不知道它是否適合你,但值得一試。

我知道這是一個主觀的答案,將獲得downvoted,但個人使用的FTP端口80勢必會慢很多特別是對文件操作,如你想達到的目標。

+0

我放棄了,決定和你建議的圖書館一起去。我仍然很好奇爲什麼這首先發生,但我相信這可能是「其中之一」...... – 2010-02-05 12:47:55

+1

這是不正確的,'FtpWebRequest'使用端口21(或取決於被動/活動和服務器)就像Filezilla一樣。我同意'FtpWebRequest'很差,但這個答案仍然是事實不正確的。 – 2012-07-02 07:29:02

1

你有訪問FTP服務器的日誌?如果你看看FTPWebRequest正在做什麼命令。它可能是它試圖在刪除它之前列出目錄。

另一個問題也許是,服務器處於被動模式,相信可以FileZilla中檢測automagicly此,檢查FileZilla中看到的連接。

+0

主動/被動模式不是問題,只是嘗試了它,並且對於這兩個選項都以相同的方式失敗。 – 2010-02-04 11:44:14

+0

如何將超時時間重新調整到某種程度。例如請求。超時=(60000 * 1)// 60000 *分鐘數 – 2010-02-04 14:55:11

1

知道什麼命令,客戶端和FTP服務器之間發送可以幫助找出是什麼原因造成的超時。是否有可能使用諸如Ethereal之類的數據包分析器來捕獲通信日誌?

替代方法可以是使用第三方FTP組件,並在其啓用日誌記錄。下面的代碼使用我們的Rebex FTP

// create client 
Ftp client = new Ftp(); 
// enable logging 
client.LogWriter = new Rebex.FileLogWriter(@"c:\temp\log.txt", Rebex.LogLevel.Debug); 

// connect 
client.Connect("ftp.example.org"); 
client.Login("username", "password"); 

// browse directories, transfer files 
client.DeleteFile("file.txt"); 

// disconnect 
client.Disconnect();