我的编程空间,编程开发者的网络收藏夹
学习永远不晚

如何浅析C# FTP WebRequest对象

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

如何浅析C# FTP WebRequest对象

这篇文章将为大家详细讲解有关如何浅析C# FTP WebRequest对象,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

C# FTP WebRequest对象
微软的.NET framework 2.0相对于1.x来说增加了对FTP的支持。以前为了符合我的需求,我不等不使用第三方类库来实现FTP功能,但是为了可靠,还是使用.NET framework的类比较好。我的这段代码没有做成可重复使用的类库的形式,但它却是比较容易理解的并能满足你的需求。它可以实现上传,下载,删除等任意功能。在这篇文章的后面将给大家出示.NET 2.0下实现FTP的简单代码,使用的语言是c#。或许是因为这是.NET新增的类,又或许是第三方类库已经能很好的实现你的需求,.NET 2.0的这部分类库并没有得到足够的关注。


背景
作为我的工作的一部分,我已经使用了FTP模块,但是我只能在.NET 1.1中去使用它,所以我不能深入的研究.NET 2.0下FTP的实现。但是我相信,.NET 2.0下对FTP的支持是非常好的。


代码
不要忘记引入命名空间
using System.NET;
using System.IO;
下面的几个步骤包括了使用FTP WebRequest类实现FTP功能的一般过程
1、创建一个FTP WebRequest对象,指向FTP服务器的uri
2、设置FTP的执行方法(上传,下载等)
3、给FTP WebRequest对象设置属性(是否支持ssl,是否使用二进制传输等)
4、设置登录验证(用户名,密码)
5、执行请求
6、接收相应流(如果需要的话)
7、如果没有打开的流,则关闭FTP请求

开发任何FTP应用程序都需要一个相关的FTP服务器及它的配置信息。FTP WebRequest暴露了一些属性来设置这些信息。

接下来的代码示例了上传功能,首先设置一个uri地址,包括路径和文件名。这个uri被使用在FTP WebRequest实例中。

然后根据FTP请求设置C# FTP WebRequest对象的属性

其中一些重要的属性如下:
◆Credentials - 指定登录FTP服务器的用户名和密码。
◆KeepAlive - 指定连接是应该关闭还是在请求完成之后关闭,默认为true
◆UseBinary - 指定文件传输的类型。有两种文件传输模式,一种是Binary,另一种是ASCII。两种方法在传输时,字节的第8位是不同的。ASCII使用第8位作为错误控制,而Binary的8位都是有意义的。所以当你使用ASCII传输时要小心一些。简单的说,如果能用记事本读和写的文件用ASCII传输就是安全的,而其他的则必须使用Binary模式。当然使用Binary模式发送ASCII文件也是非常好的。
◆UsePassive - 指定使用主动模式还是被动模式。早先所有客户端都使用主动模式,而且工作的很好,而现在因为客户端防火墙的存在,将会关闭一些端口,这样主动模式将会失败。在这种情况下就要使用被动模式,但是一些端口也可能被服务器的防火墙封掉。不过因为FTP服务器需要它的FTP服务连接到一定数量的客户端,所以他们总是支持被动模式的。这就是我们为什么要使用被动模式的原意,为了确保数据可以正确的传输,使用被动模式要明显优于主动模式。(译者注:主动(PORT)模式建立数据传输通道是由服务器端发起的,服务器使用20端口连接客户端的某一个大于1024的端口;在被动(PASV)模式中,数据传输的通道的建立是由FTP客户端发起的,他使用一个大于1024的端口连接服务器的1024以上的某一个端口)
◆ContentLength - 设置这个属性对于FTP服务器是有用的,但是客户端不使用它,因为FTP WebRequest忽略这个属性,所以在这种情况下,该属性是无效的。但是如果我们设置了这个属性,FTP服务器将会提前预知文件的大小(在upload时会有这种情况)
◆Method - 指定当前请求是什么命令(upload,download,filelist等)。这个值定义在结构体WebRequestMethods.FTP中。以上介绍C# FTP WebRequest对象。

  1. private void Upload(string filename){  

  2. FileInfo fileInf = new FileInfo(filename);  

  3. string uri = "ftp://" + ftpServerIP + "/" + fileInf.Name;  

  4. FtpWebRequest reqFTP;  

  5.  

  6. // 根据uri创建FtpWebRequest对象  

  7. reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri
    ("ftp://" + ftpServerIP + "/" + fileInf.Name));  

  8.  

  9. // ftp用户名和密码  

  10. reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);  

  11.  

  12. // 默认为true,连接不会被关闭  

  13. // 在一个命令之后被执行  

  14. reqFTP.KeepAlive = false;  

  15.  

  16. // 指定执行什么命令  

  17. reqFTP.Method = WebRequestMethods.Ftp.UploadFile;  

  18.  

  19. // 指定数据传输类型  

  20. reqFTP.UseBinary = true;  

  21.  

  22. // 上传文件时通知服务器文件的大小  

  23. reqFTP.ContentLength = fileInf.Length;  

  24.  

  25. // 缓冲大小设置为2kb  

  26. int buffLength = 2048;  

  27.  

  28. byte[] buff = new byte[buffLength];  

  29. int contentLen;  

  30.  

  31. // 打开一个文件流 (System.IO.FileStream) 去读上传的文件  

  32. FileStream fs = fileInf.OpenRead();  

  33. try  

  34. {  

  35. // 把上传的文件写入流  

  36. Stream strm = reqFTP.GetRequestStream();  

  37.  

  38. // 每次读文件流的2kb  

  39. contentLen = fs.Read(buff, 0, buffLength);  

  40.  

  41. // 流内容没有结束  

  42. while (contentLen != 0)  

  43. {  

  44. // 把内容从file stream 写入 upload stream  

  45. strm.Write(buff, 0, contentLen);  

  46.  

  47. contentLen = fs.Read(buff, 0, buffLength);  

  48. }  

  49.  

  50. // 关闭两个流  

  51. strm.Close();  

  52. fs.Close();  

  53. }  

  54. catch (Exception ex)  

  55. {  

  56. MessageBox.Show(ex.Message, "Upload Error");  

  57. }  

  58. }  

关于如何浅析C# FTP WebRequest对象就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

如何浅析C# FTP WebRequest对象

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何浅析C# FTP WebRequest对象

这篇文章将为大家详细讲解有关如何浅析C# FTP WebRequest对象,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。C# FTP WebRequest对象微软的.NET framewor
2023-06-17

如何浅析Python3中对象垃圾收集机制

如何浅析Python3中对象垃圾收集机制,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Python3之对象垃圾收集机制浅析GC作为现代编程语言的自动内存管理机制,专注于两件事:
2023-06-02

如何浅析.NET C# DES

今天就跟大家聊聊有关如何浅析.NET C# DES,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。C# DES加密应该是最基础的加密算法,为了搞清楚它在.NET C#里面的用法,我费了
2023-06-17

如何浅析C++中的C++堆栈

这篇文章给大家介绍如何浅析C++中的C++堆栈,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。想要学好C++的C++堆栈,那么就要了解什么是C++堆栈,所为C++堆栈就是一种数据项按序排列的数据结构,只能在一端(称为栈顶
2023-06-17

C++如何实现对象池

这篇“C++如何实现对象池”文章,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要参考一下,对于“C++如何实现对象池”,小编整理了以下知识点,请大家跟着小编的步伐一步一步的慢慢理解,接下来就让我们进入主题吧。前言需求
2023-06-26

C#如何调用COM对象

这篇文章主要介绍C#如何调用COM对象,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!C#调用COM对象我们曾经在以前的应用中多次需要得到SQL Server的详细信息,过去,我们必须使用API和效率低下的ADO的调用
2023-06-17

如何解析DAO.NET DataTable对象

本篇文章给大家分享的是有关如何解析DAO.NET DataTable对象,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1.从表中删除或移除一个数据行当用户对表中的数据进行处理时
2023-06-17

C#中如何初始化对象

C#中如何初始化对象,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。具体示例如下:classPoint { publicintX{get;set;} publicint
2023-06-17

C++中如何使用栈对象

这篇文章将为大家详细讲解有关C++中如何使用栈对象,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。这的确不错,相对而言,这个比C#中的using 关键字(dispose模式),以及Java中的
2023-06-17

C#中如何存储BLOB对象

本篇文章给大家分享的是有关C#中如何存储BLOB对象,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。C#存储BLOB对象检索和C#存储BLOB对象是一个很简单的过程;相反的过程,
2023-06-17

C#中如何使用 FileSystemWatcher对象

这期内容当中小编将会给大家带来有关C#中如何使用 FileSystemWatcher对象,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。属性:1.Name——这个属性中使事件被提交的文件的名称。其中并不包含
2023-06-17

C#中如何使用String对象

C#中如何使用String对象,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。把一个字符串变量赋给另一个字符串时,就会创建一个全新的C# String对象,就是说这个时候就会有两
2023-06-17

php如何解析数组对象

这篇文章主要介绍“php如何解析数组对象”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“php如何解析数组对象”文章能帮助大家解决问题。PHP是一种流行的服务器端编程语言,常被用于构建Web应用程序和
2023-07-06

C++中如何使用函数对象

C++中如何使用函数对象,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。适合对属于基本数据类型的对象排序,它使用<作为排序比较规则,第2种语法则是根据指定排序规则comp来进行排
2023-06-17

C语言如何允许在对象中使用 XML 解析器

C语言本身不支持对象和XML解析,但可以通过以下方式实现:使用面向对象库:提供对象模型和XML解析功能,如Libxml2和Expat。使用XML解析API:提供解析XML数据的函数和数据结构,如libxml和Xerces-C++。优点:简化解析过程增强代码可读性利用现有功能缺点:增加依赖性和复杂性需要理解第三方库/API
C语言如何允许在对象中使用 XML 解析器
2024-04-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录