[Full]
完整版
[Rss]
订阅
[Xml]
无图版
[Xhtml]
无图版
Rss
& SiteMap
曙海教育集团论坛
http://www.bjzhda.cn
曙海教育集团论坛
◎
曙海教育集团论坛
→
Microsoft.NET Framework
→
Microsoft .NET Framework 2.0对文件传输协议(FTP)操作总结1
共1 条记录, 每页显示 10 条, 页签:
[1]
[浏览完整版]
标题:Microsoft .NET Framework 2.0对文件传输协议(FTP)操作总结1
1楼
wangxinxin
发表于:2010-12-15 9:21:25
以下内容含脚本,或可能导致页面不正常的代码
FTP<span class="t_tag" onclick="tagshow(event)" href="tools/ajax.aspx?t=topicswithsametag&tagid=12">上传</span>,下载,新建,删除,FTP间传送文件等 最近项目需要对FTP服务器进行操作,现把实现总结如下: 打算分2篇总结: 第1篇总结Ftp的一些常规的操作实现(例如:上传,下载,新建,删除,FTP间互传文件等操作) 第2篇总结Ftp的操作的一些其他实现(例如:<span class="t_tag" onclick="tagshow(event)" href="tools/ajax.aspx?t=topicswithsametag&tagid=129">异步</span>上传,异步下载等其他操作) Microsoft .NET Framework 2.0新增加了3个类使我们很方便的对文件传输协议(FTP)服务器进行操作 FtpWebRequest类:实现文件传输协议(FTP)客户端 public sealed class FtpWebRequest : WebRequest FtpWebResponse类:封装文件传输协议(FTP)服务器对请求的响应 public class FtpWebResponse : WebResponse, IDisposable WebRequestMethods.Ftp类:表示可与FTP请求一起使用的FTP协议方法的类型,无法继承此类 public static class Ftp 类关系图 附件: <a class="pin5i_attach_a" href="http://www.pin5i.com/login.aspx">FtpWebResponse_class.jpg </a> 操作ftp的一般步骤我总结如下: 第一步:WebRequest.Create方法,获得FtpWebRequest的实例 第二步:利用WebRequestMethods.Ftp设置FtpWebRequest的Method属性,指定使用的FTP协议方法的类型 第三步:设置FtpWebRequest的Credentials属性,指定用户名和密码 第四步:发出请求 第五步:接收响应数据流(有些ftp操作可能没这一步,例如给文件夹改名) 第六步:关闭流 下面从几段代码来分别展示ftp的不同操作: <b>1.文件夹和文件信息</b> 关键知识说明: a.FtpWebRequest类没有公开的构造函数,我们通过WebRequest.Create方法,获得FtpWebRequest的实例 b.通过WebRequestMethods.Ftp.ListDirectoryDetails(详细列表)或者WebRequestMethods.Ftp.ListDirectory(简短列表)获取FTP服务器上的文件列表 c.请求返回的数据在GetResponseStream方法返回的流中 d.字符编码请用System.Text.Encoding.Default,要不中文名会乱码 e.FtpWebRequest.Credentials属性设置登陆用户名和密码 f.FtpWebRequest.UseBinary属性,true,指示服务器要传输的是二进制数据.false,指示数据为文本。默认值为true g.FtpWebRequest.EnableSsl属性,如果控制和数据传输是加密的,则为true.否则为false.默认值为 false 实例代码: 获取<a href="ftp://218.16.229.120/" target="_blank" rel="nofollow">ftp://218.16.229.120</a>上的文件信息 <div class="blockcode"> <div id="code26123_-1"> <ol> <li>Uri uri = new Uri ( "ftp://218.16.229.120" ); <li> <li>FtpWebRequest listRequest = ( FtpWebRequest ) WebRequest.Create ( uri ); <li> <li>listRequest.Method = WebRequestMethods.Ftp.ListDirectoryDetails; <li>//listRequest.Method = WebRequestMethods.Ftp.ListDirectory; <li> <li>string ftpUser = ""; <li>string ftpPassWord = ""; <li>listRequest.Credentials = new NetworkCredential ( ftpUser , ftpPassWord ); <li> <li>FtpWebResponse listResponse = ( FtpWebResponse ) listRequest.GetResponse ( ); <li>Stream responseStream = listResponse.GetResponseStream ( ); <li>StreamReader readStream = new StreamReader ( responseStream , System.Text.Encoding.Default ); <li> <li>if ( readStream != null ) <li>{ <li> MessageBox.Show ( readStream.ReadToEnd ( ) ); <li>} <li> <li>MessageBox.Show ( string.Format ( "状态: {0},{1}" ,listResponse.StatusCode, listResponse.StatusDescription ) ); <li> <li>listResponse.Close ( ); <li>responseStream.Close ( ); <li>readStream.Close ( ); </li></ol></div><em >复制代码</em></div>通过WebRequestMethods.Ftp.ListDirectoryDetails(详细列表)或者WebRequestMethods.Ftp.ListDirectory(简短列表)返回的结果是不一样的.请看图 附件: <a class="pin5i_attach_a" href="http://www.pin5i.com/login.aspx">FtpWebResponse_msg.jpg </a> 利用WebRequestMethods.Ftp.ListDirectoryDetails,readStream.ReadToEnd ( )返回的字符串比较复杂(不同类型的Ftp会有不同返回形式的返回结果),要把里面的文件夹和文件区分列出来比较繁琐,代码比较多,所以我没写出来,感兴趣的朋友可以留言,我可以邮件发送. <b>2.取ftp登陆身份<span class="t_tag" onclick="tagshow(event)" href="tools/ajax.aspx?t=topicswithsametag&tagid=247">验证</span>完成后的欢迎信息</b> 关键知识说明: a.FtpWebResponse.WelcomeMessage属性获取身份验证完成时FTP服务器发送的消息 实例代码: 获取<a href="ftp://218.16.229.120/" target="_blank" rel="nofollow">ftp://218.16.229.120</a>登陆身份验证完成后的欢迎信息 <div class="blockcode"> <div id="code26123_0"> <ol> <li>Uri uri = new Uri ( "ftp://218.16.229.120" ); <li> <li>FtpWebRequest listRequest = ( FtpWebRequest ) WebRequest.Create ( uri ); <li> <li>listRequest.Method = WebRequestMethods.Ftp.ListDirectoryDetails; <li> <li>string ftpUser = ""; <li>string ftpPassWord = ""; <li>listRequest.Credentials = new NetworkCredential ( ftpUser , ftpPassWord ); <li> <li>FtpWebResponse listResponse = ( FtpWebResponse ) listRequest.GetResponse ( ); <li> <li>MessageBox.Show ( listResponse.WelcomeMessage ); </li></ol></div><em >复制代码</em></div>附加说明:要是FTP服务器的欢迎信息带有中文,运行这段代码时可能会发生异常(基础连接已经关闭: 服务器提交了协议). 解决办法:打补丁Microsoft .NET Framework 2.0 Service Pack 1 <b>3.重命名目录</b> 关键知识说明: a.WebRequestMethods.Ftp.Rename表示重命名目录的FTP协议方法 b.FtpWebRequest.RenameTo属性重命名的新名称 实例代码: 把<a href="ftp://218.16.229.120/" target="_blank" rel="nofollow">ftp://218.16.229.120/</a>上的a目录重命名为av <div class="blockcode"> <div id="code26123_1"> <ol> <li>Uri uri = new Uri ( "ftp://218.16.229.120/a" ); <li> <li>FtpWebRequest listRequest = ( FtpWebRequest ) WebRequest.Create ( uri ); <li> <li>listRequest.Method = WebRequestMethods.Ftp.Rename; <li> <li>string ftpUser = ""; <li>string ftpPassWord = ""; <li>listRequest.Credentials = new NetworkCredential ( ftpUser , ftpPassWord ); <li> <li>listRequest.RenameTo = "av"; <li> <li>FtpWebResponse listResponse = ( FtpWebResponse ) listRequest.GetResponse ( ); <li> <li>MessageBox.Show ( listResponse.StatusDescription ); </li></ol></div><em >复制代码</em></div><b>4.删除目录</b> 关键知识说明: a.WebRequestMethods.Ftp.RemoveDirectory表示移除目录的FTP协议方法 实例代码: 删除<a href="ftp://218.16.229.120/" target="_blank" rel="nofollow">ftp://218.16.229.120</a>上的av文件夹 <div class="blockcode"> <div id="code26123_2"> <ol> <li>Uri uri = new Uri ( "ftp://218.16.229.120/av" ); <li> <li>FtpWebRequest listRequest = ( FtpWebRequest ) WebRequest.Create ( uri ); <li> <li>listRequest.Method = WebRequestMethods.Ftp.RemoveDirectory; <li> <li>string ftpUser = ""; <li>string ftpPassWord = ""; <li>listRequest.Credentials = new NetworkCredential ( ftpUser , ftpPassWord ); <li> <li>FtpWebResponse listResponse = ( FtpWebResponse ) listRequest.GetResponse ( ); <li> <li>MessageBox.Show ( listResponse.StatusDescription ); </li></ol></div><em >复制代码</em></div><b>5.新建目录</b> 关键知识说明: a.WebRequestMethods.Ftp.MakeDirectory表示在FTP服务器上创建目录的协议方法 实例代码: 在<a href="ftp://218.16.229.120/" target="_blank" rel="nofollow">ftp://218.16.229.120</a>上建立目录vb <div class="blockcode"> <div id="code26123_3"> <ol> <li>Uri uri = new Uri ( "ftp://218.16.229.120/vb" ); <li> <li>FtpWebRequest listRequest = ( FtpWebRequest ) WebRequest.Create ( uri ); <li> <li>listRequest.Method = WebRequestMethods.Ftp.MakeDirectory; <li> <li>string ftpUser = ""; <li>string ftpPassWord = ""; <li>listRequest.Credentials = new NetworkCredential ( ftpUser , ftpPassWord ); <li> <li>FtpWebResponse listResponse = ( FtpWebResponse ) listRequest.GetResponse ( ); <li> <li>MessageBox.Show ( listResponse.StatusDescription ); </li></ol></div><em >复制代码</em></div><b>6.得文件大小</b> 关键知识说明: a.WebRequestMethods.Ftp.GetFileSize表示要用于检索FTP服务器上的文件大小 b.流数据的长度可以从FtpWebResponse.ContentLength属性中获取。 实例代码: 获取<a href="ftp://218.16.229.120上的会议记录.doc/" target="_blank" rel="nofollow">ftp://218.16.229.120上的会议记录.doc</a>文件大小 <div class="blockcode"> <div id="code26123_4"> <ol> <li>Uri uri = new Uri ( "ftp://218.16.229.120/会议记录.doc" ); <li> <li>FtpWebRequest listRequest = ( FtpWebRequest ) WebRequest.Create ( uri ); <li> <li>listRequest.Method = WebRequestMethods.Ftp.GetFileSize; <li> <li>string ftpUser = ""; <li>string ftpPassWord = ""; <li>listRequest.Credentials = new NetworkCredential ( ftpUser , ftpPassWord ); <li> <li>FtpWebResponse listResponse = ( FtpWebResponse ) listRequest.GetResponse ( ); <li> <li>MessageBox.Show ( string.Format ( "文件大小: {0}" , listResponse.ContentLength ) ); </li></ol></div><em >复制代码</em></div><b>7.删除文件</b> 关键知识说明: a.WebRequestMethods.Ftp.DeleteFile表示要用于删除FTP服务器上的文件 实例代码: 删除<a href="ftp://218.16.229.120上的工作安排.txt/" target="_blank" rel="nofollow">ftp://218.16.229.120上的工作安排.txt</a>文件 <div class="blockcode"> <div id="code26123_5"> <ol> <li>Uri uri = new Uri ( "ftp://218.16.229.120/工作安排.txt" ); <li> <li>FtpWebRequest listRequest = ( FtpWebRequest ) WebRequest.Create ( uri ); <li> <li>listRequest.Method = WebRequestMethods.Ftp.DeleteFile; <li> <li>string ftpUser = ""; <li>string ftpPassWord = ""; <li>listRequest.Credentials = new NetworkCredential ( ftpUser , ftpPassWord ); <li> <li>FtpWebResponse listResponse = ( FtpWebResponse ) listRequest.GetResponse ( ); <li> <li>MessageBox.Show ( string.Format ( "Delete status: {0}" , listResponse.StatusDescription ) ); </li></ol></div><em >复制代码</em></div><b>8.上传文件</b> 关键知识说明: a.WebRequestMethods.Ftp.UploadFile表示将文件上载到FTP服务器 b.使用FtpWebRequest对象向服务器上载文件,则必须将文件内容写入请求流,请求流是通过调用FtpWebRequest.GetRequestStream方法.如果未将属性设置为UploadFile,则不能获取流。 c.异步对应方法(FtpWebRequest.BeginGetRequestStream方法和FtpWebRequest.EndGetRequestStream 方法),关于异步上传的实现我会再写在下篇总汇中
说明:
上面显示的是代码内容。您可以先检查过代码没问题,或修改之后再运行.
共1 条记录, 每页显示 10 条, 页签:
[1]
Copyright © 2000 - 2009
曙海
教育集团
Powered By
曙海教育集团
Version 2.2
Processed in .01563 s, 2 queries.
[Full]
完整版
[Rss]
订阅
[Xml]
无图版
[Xhtml]
无图版