我想从ftp服务器下载一个图像,但是当我去“FtpWebResponse”时,我只是将这个例外作为标题。
以下是我的下载功能
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(myStringWebSource);
request.Method = WebRequestMethods.Ftp.DownloadFile;
request.Credentials = new NetworkCredential(this.FtpUserID, this.FtpPassword);
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
System.IO.Stream responseStream = response.GetResponseStream();
System.IO.StreamReader reader = new System.IO.StreamReader(responseStream);
System.IO.StreamWriter writer = new System.IO.StreamWriter(SaveFile);
writer.Write(reader.ReadToEnd());
writer.Close();
reader.Close();
response.Close();
我已经谷歌这个例外了几天,但我仍然无法弄清楚为什么会出错。如果没有足够的信息,请告诉我。
答案 0 :(得分:0)
当您要下载的文件正由另一个进程使用时,您将收到此错误。
答案 1 :(得分:0)
为了解决此问题,需要强制System.Net.FtpWebRequest命令恢复到以前在.Net Framework 2.0 / 3.5中工作方式的旧行为,并在发布之前发出额外的CWD命令实际的命令。
为了执行此操作,需要在调用System.Net.FtpWebRequest类的任何实例之前放置以下代码。下面的代码只需要调用一次,因为它会更改整个应用程序域的设置。
private static void SetMethodRequiresCWD()
{
Type requestType = typeof(FtpWebRequest);
FieldInfo methodInfoField = requestType.GetField("m_MethodInfo", BindingFlags.NonPublic | BindingFlags.Instance);
Type methodInfoType = methodInfoField.FieldType;
FieldInfo knownMethodsField = methodInfoType.GetField("KnownMethodInfo", BindingFlags.Static | BindingFlags.NonPublic);
Array knownMethodsArray = (Array)knownMethodsField.GetValue(null);
FieldInfo flagsField = methodInfoType.GetField("Flags", BindingFlags.NonPublic | BindingFlags.Instance);
int MustChangeWorkingDirectoryToPath = 0x100;
foreach (object knownMethod in knownMethodsArray)
{
int flags = (int)flagsField.GetValue(knownMethod);
flags |= MustChangeWorkingDirectoryToPath;
flagsField.SetValue(knownMethod, flags);
}
}