这里介绍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的这部分类库并没有得到满足的重视。
布景
作为我的作业的一部分,我现已运用了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目标。
- privatevoidUpload(stringfilename){
- FileInfofileInf=newFileInfo(filename);
- stringuri="ftp://"+ftpServerIP+"/"+fileInf.Name;
- FtpWebRequestreqFTP;
- //依据uri创立FtpWebRequest目标
- reqFTP=(FtpWebRequest)FtpWebRequest.Create(newUri
("ftp://"+ftpServerIP+"/"+fileInf.Name));- //ftp用户名和暗码
- reqFTP.Credentials=newNetworkCredential(ftpUserID,ftpPassword);
- //默以为true,衔接不会被封闭
- //在一个指令之后被履行
- reqFTP.KeepAlive=false;
- //指定履行什么指令
- reqFTP.Method=WebRequestMethods.Ftp.UploadFile;
- //指定数据传输类型
- reqFTP.UseBinary=true;
- //上传文件时告诉服务器文件的巨细
- reqFTP.ContentLength=fileInf.Length;
- //缓冲巨细设置为2kb
- intbuffLength=2048;
- byte[]buff=newbyte[buffLength];
- intcontentLen;
- //翻开一个文件流(System.IO.FileStream)去读上传的文件
- FileStreamfs=fileInf.OpenRead();
- try
- {
- //把上传的文件写入流
- Streamstrm=reqFTP.GetRequestStream();
- //每次读文件流的2kb
- contentLen=fs.Read(buff,0,buffLength);
- //流内容没有结束
- while(contentLen!=0)
- {
- //把内容从filestream写入uploadstream
- strm.Write(buff,0,contentLen);
- contentLen=fs.Read(buff,0,buffLength);
- }
- //封闭两个流
- strm.Close();
- fs.Close();
- }
- catch(Exceptionex)
- {
- MessageBox.Show(ex.Message,"UploadError");
- }
- }
【修改引荐】
- 描绘C# Anonymous Type
- C#调用CreateObject
- 浅谈C#目标和调集
- C#分部办法的使用场景
- 浅析C# Anonymous Type
知优网 » 浅析C# FTP WebRequest目标(ftpwebrequest类)