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

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

它使访问 FTP 更简单 IMO。示例代码(取自他们的文档并稍作修改):

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 回答
1

我的猜测是,这与您使用StreamReader. 有可能在构建时它正在从流中读取以尝试确定编码。由于您并没有真正使用它 - 只是BaseStream- 它没有意义并导致代码不清楚。

只需使用:

Stream inputStream = objResponse.GetResponseStream();

此外,您应该对所有流和响应使用using语句。

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

于 2012-11-30T13:27:43.827 回答