这里介绍C# FTP WebRequest对象,作为我的工作的一部分,我已经使用了FTP模块,但是我只能在.NET 1.1中去使用它,所以我不能深入的研究.NET 2.0下FTP的实现。

C# FTP WebRequest目标介绍
微软的.NET framework 2.0相关于1.x来说增加了对FTP的支撑。曾经为了契合我的需求,我不等不运用第三方类库来完结FTP功用,可是为了牢靠,仍是运用.NET framework的类比较好。我的这段代码没有做成可重复运用的类库的方式,但它却是比较简略了解的并能满意你的需求。它能够完结上传,下载,删去等恣意功用。在这篇文章的后边将给咱们出示.NET 2.0下完结FTP的简略代码,运用的言语是C#。或许是由于这是.NET新增的类,又或许是第三方类库现已能很好的完结你的需求,.NET 2.0的这部分类库并没有得到满足的重视。

浅析C# FTP WebRequest目标(ftpwebrequest类)  C# WebRequest对象 第1张


布景
作为我的作业的一部分,我现已运用了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. privatevoidUpload(stringfilename){
  2. FileInfofileInf=newFileInfo(filename);
  3. stringuri="ftp://"+ftpServerIP+"/"+fileInf.Name;
  4. FtpWebRequestreqFTP;
  5. //依据uri创立FtpWebRequest目标
  6. reqFTP=(FtpWebRequest)FtpWebRequest.Create(newUri
    ("ftp://"+ftpServerIP+"/"+fileInf.Name));
  7. //ftp用户名和暗码
  8. reqFTP.Credentials=newNetworkCredential(ftpUserID,ftpPassword);
  9. //默以为true,衔接不会被封闭
  10. //在一个指令之后被履行
  11. reqFTP.KeepAlive=false;
  12. //指定履行什么指令
  13. reqFTP.Method=WebRequestMethods.Ftp.UploadFile;
  14. //指定数据传输类型
  15. reqFTP.UseBinary=true;
  16. //上传文件时告诉服务器文件的巨细
  17. reqFTP.ContentLength=fileInf.Length;
  18. //缓冲巨细设置为2kb
  19. intbuffLength=2048;
  20. byte[]buff=newbyte[buffLength];
  21. intcontentLen;
  22. //翻开一个文件流(System.IO.FileStream)去读上传的文件
  23. FileStreamfs=fileInf.OpenRead();
  24. try
  25. {
  26. //把上传的文件写入流
  27. Streamstrm=reqFTP.GetRequestStream();
  28. //每次读文件流的2kb
  29. contentLen=fs.Read(buff,0,buffLength);
  30. //流内容没有结束
  31. while(contentLen!=0)
  32. {
  33. //把内容从filestream写入uploadstream
  34. strm.Write(buff,0,contentLen);
  35. contentLen=fs.Read(buff,0,buffLength);
  36. }
  37. //封闭两个流
  38. strm.Close();
  39. fs.Close();
  40. }
  41. catch(Exceptionex)
  42. {
  43. MessageBox.Show(ex.Message,"UploadError");
  44. }
  45. }

【修改引荐】

  1. 描绘C# Anonymous Type
  2. C#调用CreateObject
  3. 浅谈C#目标和调集
  4. C#分部办法的使用场景
  5. 浅析C# Anonymous Type
转载请说明出处
知优网 » 浅析C# FTP WebRequest目标(ftpwebrequest类)

发表评论

您需要后才能发表评论