下载时关闭流时出现 FtpWebResponse 错误 550(Windows Server 2012)
FtpWebResponse error 550 when closing stream on dowloading (Windows Server 2012)
我已经阅读了很多关于 FtpWebResponse 的 hte 550 问题的消息和问题。但是我遇到的问题非常具体。第一次尝试下载文件时,我没有遇到任何问题。响应返回一个我正在保存到文件中的流。
但是当我第二次尝试为同一个文件调用此方法时,我正在检查该文件是否已存在于我的 PC 上,如果是,我将尝试关闭流并处理响应.问题是响应和流在关闭方法上抛出 550 错误。
在 Wireshark 中,在消息 "Data connection already open; transfer starting (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,但最后还是没有用。
我想的最后一件事是我从响应中获取一个流只是为了关闭它。我可以在不读取一个字节的情况下关闭流吗?我可以解决一个流只是为了关闭它吗?
我目前的解决方案是,您不能在调用它们时同时关闭响应流或响应流。清理所有内容的唯一方法是将整个流复制到(例如)MemoryStream,然后您可以关闭两者。
我已经阅读了很多关于 FtpWebResponse 的 hte 550 问题的消息和问题。但是我遇到的问题非常具体。第一次尝试下载文件时,我没有遇到任何问题。响应返回一个我正在保存到文件中的流。
但是当我第二次尝试为同一个文件调用此方法时,我正在检查该文件是否已存在于我的 PC 上,如果是,我将尝试关闭流并处理响应.问题是响应和流在关闭方法上抛出 550 错误。
在 Wireshark 中,在消息 "Data connection already open; transfer starting (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,但最后还是没有用。
我想的最后一件事是我从响应中获取一个流只是为了关闭它。我可以在不读取一个字节的情况下关闭流吗?我可以解决一个流只是为了关闭它吗?
我目前的解决方案是,您不能在调用它们时同时关闭响应流或响应流。清理所有内容的唯一方法是将整个流复制到(例如)MemoryStream,然后您可以关闭两者。