3

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();

私はこの例外を数日間グーグルで検索しましたが、なぜこれがうまくいかなかったのかまだわかりません。十分な情報がない場合は、plzが教えてくれます。

4

2 に答える 2

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

于 2013-11-06T21:58:05.240 に答える