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