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

本文关键字:Windows 2012 错误 Server FtpWebResponse 下载 | 更新日期: 2023-09-27 18:19:43

我读了很多关于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解决方案来解决类似的问题,但最终没有帮助。

我想的最后一件事是,我从响应中获取流只是为了关闭它。我可以在不读取流的一个字节的情况下关闭流吗?我可以解析一个流来关闭它吗?

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

我目前的解决方案是,您不能在调用流和响应时同时关闭它们。清理所有内容的唯一方法是将整个流复制到(例如)MemoryStream,然后可以关闭这两个流。