ftp 下载exe文件

少说绝对 2010-05-14 06:13:35
从ftp下载 exe文件必须得用二进制模式下载,设置:request.UseBinary = true;下载如果用streamreader接的话,exe文件不可用,并且部分文件会变大,但是文本文件正常。
如果用BinaryReader 接数据,代码如下
//获得文件的内容
private void getFileContent(string str1)
{
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(@"ftp://192.168.0.1/测试/" + projectName + str1);

request.KeepAlive = false;

request.Method = WebRequestMethods.Ftp.DownloadFile;

request.Credentials = new NetworkCredential("anonymous", "");

//注意: 多次调用 GetResponse 会返回相同的响应对象;该请求不会重新发出。
request.EnableSsl = false;
request.UseBinary = true;
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();
FileStream fw = new FileStream(@"C:\Documents and Settings\Administrator\桌面\dufei\阿瓦提client"+str1,FileMode.Create);
BinaryReader reader = new BinaryReader(responseStream);
BinaryWriter bw = new BinaryWriter(fw);
byte fileContext;
reader.BaseStream.Seek(0, SeekOrigin.Begin);
bw.BaseStream.Seek(0, SeekOrigin.End);

while (reader.BaseStream.Position < reader.BaseStream.Length)
{
fileContext = reader.ReadByte(); //按照字节读取文件
bw.Write(fileContext); //写入文件
}

reader.Close();

response.Close();
}




reader.BaseStream.Seek(0, SeekOrigin.Begin);处
会报 “此流不支持查找操作“的异常
Stream responseStream = response.GetResponseStream();responseStream 的length也会报Length = “responseStream.Length”引发了“System.NotSupportedException”类型的异常。
...全文
388 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
pxl_accp 2011-04-07
  • 打赏
  • 举报
回复
问题没有解决,还是在报错
少说绝对 2010-05-17
  • 打赏
  • 举报
回复
已经搞定,谢谢大家。 加上这句就OK了,request.KeepAlive = false;望后来者参考。
少说绝对 2010-05-14
  • 打赏
  • 举报
回复
大部分 文件都可以下载成功,只有个别文件下载报异常
捷哥1999 2010-05-14
  • 打赏
  • 举报
回复
1、你首先要有权限访问那个ftp目录下的文件
2、你要对应的用户名和密码来调用这句:
reqFTP.Credentials = new NetworkCredential(ftpUser, ftpPwd);
少说绝对 2010-05-14
  • 打赏
  • 举报
回复
回1楼
谢谢你的代码
用你的代码有2个异常
1:对路径”路径。。。。xyz.db“的访问被拒绝
2:远程服务器返回错误:(550)文件不可用(例如,未找到文件,无法访问文件)
少说绝对 2010-05-14
  • 打赏
  • 举报
回复
回2楼
谢谢你的代码
用你的代码有2个异常
1:对路径”路径。。。。xyz.db“的访问被拒绝
2:远程服务器返回错误:(550)文件不可用(例如,未找到文件,无法访问文件)
Sant11 2010-05-14
  • 打赏
  • 举报
回复
帮顶,希望您能尽快得到答复
捷哥1999 2010-05-14
  • 打赏
  • 举报
回复
试试看我的代码:

/// <summary>
/// 实现 ftp下载操作
/// </summary>
/// <param name="filePath">保存到本地的文件名</param>
/// <param name="fileName">远程文件名</param>
public void Download(string filePath, string fileName)
{
FtpWebRequest reqFTP;
try
{
//filePath = <<The full path where the file is to be created.>>,
//fileName = <<Name of the file to be created(Need not be the name of the file on FTP server).>>
FileStream outputStream = new FileStream(filePath + "\\" + fileName, FileMode.Create);

reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + fileName));
reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
reqFTP.UseBinary = true;
reqFTP.Credentials = new NetworkCredential(ftpUser, ftpPwd);
FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
Stream ftpStream = response.GetResponseStream();
long cl = response.ContentLength;
int bufferSize = 2048;
int readCount;
byte[] buffer = new byte[bufferSize];

readCount = ftpStream.Read(buffer, 0, bufferSize);
while (readCount > 0)
{
outputStream.Write(buffer, 0, readCount);
readCount = ftpStream.Read(buffer, 0, bufferSize);
}

ftpStream.Close();
outputStream.Close();
response.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}

110,586

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧