如何在C#中从Ftp下载Zip文件

时间:2012-11-30 13:24:26

标签: c# ftp

我必须使用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文件而不是文本文件。 请帮助我,我该怎么做,或者我是一个误会。

2 个答案:

答案 0 :(得分:1)

猜测是因为你正在使用StreamReader这一事实。它可能在构建时从流中读取以尝试确定编码。因为你不是真的使用它 - 只是BaseStream - 它没有意义,导致代码不清楚。

只需使用:

Stream inputStream = objResponse.GetResponseStream();

此外,您应该使用{em>所有流的using语句和响应。

哦,如果您使用的是.NET 4或更高版本,请使用Stream.CopyTo为自己节省一些时间。

答案 1 :(得分:0)

如果您不反对使用免费的第三方库,则可以使用http://www.enterprisedt.com/products/edtftpnet/download.html

这使得访问FTP的过程更加简单。示例代码(从documentation获取并稍作修改):

using (FTPConnection ftp = new FTPConnection())
{
    ftpConnection.ServerAddress = "myserver";
    ftpConnection.UserName = userName;
    ftpConnection.Password = password; 
    ftpConnection.Connect();
    ftpConnection.DownloadFile(localFilePath, remoteFileName);
}