1

以下のコードを使用して FTP ロケーション ファイルをダウンロードしています。ファイル名に国際文字が含まれている場合を除き、すべてのファイルで機能します。

これは許可されていないようなURI形式で学びましたが、言及された場所に既存のファイルがある場合、どのようにダウンロードできますか。

テストのために、以下のように IIS の下にローカル FTP サーバーをセットアップしました。

http://www.online-tech-tips.com/computer-tips/setup-ftp-server-in-windows-iis/

string mat_address = "ftp://localhost/";
StringBuilder result = new StringBuilder();
FtpWebRequest ftp = (FtpWebRequest)WebRequest.Create(mat_address);

ftp.Credentials = new NetworkCredential("userid", "Password");
ftp.Method = WebRequestMethods.Ftp.ListDirectory;

string[] downloadfile = null;
using (FtpWebResponse response = (FtpWebResponse)ftp.GetResponse())
using (StreamReader reader = new StreamReader(response.GetResponseStream(), System.Text.Encoding.Default, true))
{
    downloadfile = reader.ReadToEnd().Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
}

foreach (string d in downloadfile)
{
    if (d.Contains("d"))
    {
        string temp = mat_address + HttpUtility.UrlPathEncode(d);
        FtpWebRequest ftp2 = (FtpWebRequest)WebRequest.Create(temp);

        ftp2.Credentials = new NetworkCredential("userid", "Password");

        ftp2.Method = WebRequestMethods.Ftp.GetDateTimestamp;

        ftp2.UseBinary = true;

        ftp2.Proxy = null;
        ftp2.KeepAlive = false;
        ftp2.UsePassive = false;

        FtpWebResponse response2 = ftp2.GetResponse() as FtpWebResponse;
        DateTime temp1 = response2.LastModified.Date;
        if (temp1 > DateTime.Now.AddDays(-10))
        {
           // Some extra work
        }
    }
}

エラーが発生しています

リモート サーバーがエラーを返しました: (550) ファイルが利用できません (ファイルが見つからない、アクセスできないなど)。

ファイル使用不可エラー

以下は、問題のあるファイル名を持つ私の FTP ルート フォルダーです。diá.png

ここに画像の説明を入力

コーディングには C# を使用し、開発には Visual Studio 2013 を使用しています。何がうまくいかないのか、誰かが助けることができます。

質問への更新: UTF8 へのエンコーディングの変更。ローカル ホストを使用すると、すべて正常に動作します。ただし、ドイツやスウェーデンなどの国際ドメインから FTP サーバーを使用する場合。名前は以下のように読みます。

以下の行でエラーが発生しています。

FtpWebResponse response2 = ftp2.GetResponse() as FtpWebResponse;

ファイル名の 16 進値: Martin によるインクルードの提案。ありがとう 31,30,31,33,36,2D,49,43,4F,4D,20,50,4A,C4,54,54,45,52,59,44,20,70,69,63,74,20,37‌​,38,78,31,31,38,20,61,6E,6E,69,2D,76,65,72,73,61,72,69,75,73,20,5B,77,31,33,32,31‌​,20,78,20,68,39,32,31,5D,20,6D,6D,20,44,49,46,46,55,53,45,2E,50,4E,47,

4

2 に答える 2

0

ローカル ファイル システムのニーズに合わせて、受信したファイル名のエンコーディングを変換する必要があると思います。復元したファイル名を投稿していただけますか? 不正な文字を含む文字列がエスケープされていると思います...

于 2015-09-09T12:24:00.553 に答える