远程服务器返回错误:(550)文件不可用(例如,找不到文件,没有访问权限)

时间:2013-03-10 05:43:54

标签: c# wpf

我想从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();

我已经谷歌这个例外了几天,但我仍然无法弄清楚为什么会出错。如果没有足够的信息,请告诉我。

2 个答案:

答案 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);
    }
}

http://support.microsoft.com/kb/2134299

相关问题