0

C# コードを使用して ftp から zip ファイルをダウンロードする必要があります。私は次のコードを使用しました。

        Uri url = new Uri("ftp://ftpurl");
        if (url.Scheme == Uri.UriSchemeFtp)
        {

            FtpWebRequest objRequest = (FtpWebRequest)FtpWebRequest.Create(url);
            //Set credentials if required else comment this Credential code
            NetworkCredential objCredential = new NetworkCredential(userid, Pwd);
            objRequest.Credentials = objCredential;
            objRequest.Method = WebRequestMethods.Ftp.DownloadFile;

            FtpWebResponse objResponse = (FtpWebResponse)objRequest.GetResponse();

            StreamReader objReader = new StreamReader(objResponse.GetResponseStream());
            byte[] buffer = new byte[16 * 1024];
            int len = 0;
            FileStream objFS = new FileStream(@"E:\ftpwrite", FileMode.Create, FileAccess.Write, FileShare.Read);
            while ((len = objReader.BaseStream.Read(buffer, 0, buffer.Length)) != 0)
            {
                objFS.Write(buffer, 0, len);
            }
            objFS.Close();
            objResponse.Close();

        }

しかし、私はftpからファイルを保存したいので、このコードは私に正しい応答を与えていません。このコードはファイルからバイト単位でファイルにデータを書き込んでいます。私のファイルはテキストファイルではなくzipファイルです。私がしなければならないことを助けてください、または私は誤解しています。

4

2 に答える 2

1

私の推測では、それはあなたが使用しているという事実と関係があると思いますStreamReader. 構築時に、エンコーディングを決定しようとするためにストリームから読み取っている可能性があります。あなたは実際にはそれを使用しBaseStreamていないので、それは無意味であり、不明確なコードにつながります.

使用するだけです:

Stream inputStream = objResponse.GetResponseStream();

さらに、すべてのストリームと応答に対してusingステートメントを使用する必要があります。

ああ、.NET 4 以降を使用している場合は、Stream.CopyTo時間を節約するために使用してください。

于 2012-11-30T13:27:43.827 に答える
1

無料のサードパーティ ライブラリを使用することに抵抗がない場合は、 http://www.enterprisedt.com/products/edtftpnet/download.htmlを使用できます。

これにより、FTP へのアクセスが非常に簡単になります。サンプルコード (ドキュメントから抜粋し、わずかに変更):

using (FTPConnection ftp = new FTPConnection())
{
    ftpConnection.ServerAddress = "myserver";
    ftpConnection.UserName = userName;
    ftpConnection.Password = password; 
    ftpConnection.Connect();
    ftpConnection.DownloadFile(localFilePath, remoteFileName);
}
于 2012-11-30T15:08:27.923 に答える