在下载时关闭流时出现FtpWebResponse错误550(Windows Server 2012)

时间:2015-10-29 13:12:40

标签: c# ftp windows-server-2012

我已经阅读了很多关于FtpWebResponse的hte 550问题的消息和问题。但我遇到的问题非常具体。我第一次尝试下载文件时,没有任何问题。响应返回一个我保存到文件的流。

但是当我尝试第二次为同一个文件调用此方法时,我正在检查该文件是否已存在于我的PC上,如果是,我正在尝试关闭该流并处理响应。问题是响应和流在close方法上抛出550错误。

在Wireshark中,在消息“数据连接已打开;传输开始(125)”之后,我得到了Windows Server 2012的550个答案。如何读取文件一次,而不是只能关闭流?

代码序列是这样的:

var request = GetNewDownloadRequest(uri);
try
{
   response = GetFTP(request);
}
catch (WebException e)
{
   throw;
}
Stream stream = response.GetResponseStream();
if (!File.Exists(localPath))
{
   SaveToFile(stream);
}

stream.Close();
response.Close();
stream = File.OpenRead(localPath);

发送请求而不使用它进行下载允许我检查文件是否也存在于FTP服务器上。

我还在我的应用和Chrome中比较了下载量。唯一的区别是Chrome在其间使用了CWD命令,因此我使用了MSDN solution with a similar issue,但最终它没有帮助。

我想到的最后一件事是我从响应中抓取一个流只关闭它。我是否可以在没有读取字节的情况下关闭流?我可以解析一个流来关闭它吗?

1 个答案:

答案 0 :(得分:0)

我目前的解决方案是,您无法在响应时关闭来自响应的流或响应。清理所有内容的唯一方法是将整个流复制到(例如)MemoryStream,然后将两者都关闭。