通过FTP删除文件时出现问题

时间:2010-01-26 12:02:00

标签: c# ftp ftpwebrequest

我正在使用C#将一些文件上传到ftp服务器。如果文件已存在,则FtpWebRequest超时,所以我想先删除它。

然而,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)连接到它,则一切正常。

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

我通过FtpWebRequest使用此Ftp找到的东西,它本身就慢得多(因为它在端口80上使用HTTP协议),它让我疯狂,因为FileZilla可以更快地完成它(显然使用端口20/21上的FTP协议)。有一个开源的ftp组件here,我不知道它是否适合你,但值得一试。

我知道这是一个主观的答案,会被低估,但就个人而言,使用ftp over 80,速度肯定会慢得多,尤其是在文件操作方面,就像你想要实现的那样。

答案 1 :(得分:1)

您是否可以访问FTP服务器的日志?如果您确实查看了FTPWebRequest正在执行的命令。它可能是在删除目录之前尝试列出目录。

另一个问题可能是服务器处于被动模式,我相信FileZilla可能会自动检测到这一点,请检查filezilla中的连接。

答案 2 :(得分: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();