知识大全 .net 2.0(c#)下简单的FTP应用程序

Posted 文件

篇首语:草若无心不发芽,人若无心不发达。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 .net 2.0(c#)下简单的FTP应用程序相关的知识,希望对你有一定的参考价值。

.net 2.0(c#)下简单的FTP应用程序  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  介绍   微软 framework 相对于 x来说增加了对FTP的支持 以前为了符合我的需求 我不等不使用第三方类库来实现FTP功能 但是为了可靠 还是使 framework的类比较好 我的这段代码没有做成可重复使用的类库的形式 但它却是比较容易理解的并能满足你的需求 它可以实现上传 下载 删除等任意功能 在这篇文章的后面将给大家出 下实现ftp的简单代码 使用的语言是c# 或许是因为这新增的类 又或许是第三方类库已经能很好的实现你的需求 的这部分类库并没有得到足够的关注         背景   作为我的工作的一部分 我已经使用了ftp模块 但是我只能 中去使用它 所以我不能深入的研 下ftp的实现 但是我相信 ne 下对ftp的支持是非常好的         代码   不要忘记引入命名空间   using System Net;   using System IO;   下面的几个步骤包括了使用FtpWebRequest类实现ftp功能的一般过程       创建一个FtpWebRequest对象 指向ftp服务器的uri    设置ftp的执行方法(上传 下载等)    给FtpWebRequest对象设置属性(是否支持ssl 是否使用二进制传输等)    设置登录验证(用户名 密码)    执行请求    接收相应流(如果需要的话)    如果没有打开的流 则关闭ftp请求      开发任何ftp应用程序都需要一个相关的ftp服务器及它的配置信息 FtpWebRequest暴露了一些属性来设置这些信息      接下来的代码示例了上传功能      首先设置一个uri地址 包括路径和文件名 这个uri被使用在FtpWebRequest实例中      然后根据ftp请求设置FtpWebRequest对象的属性      其中一些重要的属性如下    ·Credentials 指定登录ftp服务器的用户名和密码    ·KeepAlive 指定连接是应该关闭还是在请求完成之后关闭 默认为true    ·UseBinary 指定文件传输的类型 有两种文件传输模式 一种是Binary 另一种是ASCII 两种方法在传输时 字节的第 位是不同的 ASCII使用第 位作为错误控制 而Binary的 位都是有意义的 所以当你使用ASCII传输时要小心一些 简单的说 如果能用记事本读和写的文件用ASCII传输就是安全的 而其他的则必须使用Binary模式 当然使用Binary模式发送ASCII文件也是非常好的    ·UsePassive 指定使用主动模式还是被动模式 早先所有客户端都使用主动模式 而且工作的很好 而现在因为客户端防火墙的存在 将会关闭一些端口 这样主动模式将会失败 在这种情况下就要使用被动模式 但是一些端口也可能被服务器的防火墙封掉 不过因为ftp服务器需要它的ftp服务连接到一定数量的客户端 所以他们总是支持被动模式的 这就是我们为什么要使用被动模式的原意 为了确保数据可以正确的传输 使用被动模式要明显优于主动模式 (译者注 主动(PORT)模式建立数据传输通道是由服务器端发起的 服务器使用 端口连接客户端的某一个大于 的端口 在被动(PASV)模式中 数据传输的通道的建立是由FTP客户端发起的 他使用一个大于 的端口连接服务器的 以上的某一个端口)    ·ContentLength 设置这个属性对于ftp服务器是有用的 但是客户端不使用它 因为FtpWebRequest忽略这个属性 所以在这种情况下 该属性是无效的 但是如果我们设置了这个属性 ftp服务器将会提前预知文件的大小(在upload时会有这种情况)    ·Method 指定当前请求是什么命令(upload download filelist等) 这个值定义在结构体WebRequestMethods Ftp中

     private void Upload(string filename)       FileInfo fileInf = new FileInfo(filename);    string uri = ftp:// + ftpServerIP + / + fileInf Name;    FtpWebRequest reqFTP;       // 根据uri创建FtpWebRequest对象    reqFTP = (FtpWebRequest)FtpWebRequest Create(new Uri( ftp:// + ftpServerIP + / + fileInf Name));       // ftp用户名和密码    reqFTP Credentials = new NeorkCredential(ftpUserID ftpPassword);       // 默认为true 连接不会被关闭    // 在一个命令之后被执行    reqFTP KeepAlive = false;       // 指定执行什么命令    reqFTP Method = WebRequestMethods Ftp UploadFile;       // 指定数据传输类型    reqFTP UseBinary = true;       // 上传文件时通知服务器文件的大小    reqFTP ContentLength = fileInf Length;       // 缓冲大小设置为 kb    int buffLength = ;       byte[] buff = new byte[buffLength];    int contentLen;       // 打开一个文件流 (System IO FileStream) 去读上传的文件    FileStream fs = fileInf OpenRead();    try       // 把上传的文件写入流    Stream strm = reqFTP GetRequestStream();       // 每次读文件流的 kb    contentLen = fs Read(buff buffLength);       // 流内容没有结束    while (contentLen != )       // 把内容从file stream 写入 upload stream    strm Write(buff contentLen);       contentLen = fs Read(buff buffLength);          // 关闭两个流    strm Close();    fs Close();       catch (Exception ex)       MessageBox Show(ex Message Upload Error );       

      以上代码简单的示例了ftp的上传功能 创建一个指向某ftp服务器的FtpWebRequest对象 然后设置其不同的属性Credentials KeepAlive Method UseBinary ContentLength      打开本地机器上的文件 把其内容写入ftp请求流 缓冲的大小为 kb 无论上传大文件还是小文件 这都是一个合适的大小

     private void Download(string filePath string fileName)       FtpWebRequest reqFTP;       try       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 NeorkCredential(ftpUserID ftpPassword);       FtpWebResponse response = (FtpWebResponse)reqFTP GetResponse();       Stream ftpStream = response GetResponseStream();       long cl = response ContentLength;       int bufferSize = ;       int readCount;       byte[] buffer = new byte[bufferSize];       readCount = ftpStream Read(buffer bufferSize);       while (readCount > )       outputStream Write(buffer readCount);       readCount = ftpStream Read(buffer bufferSize);          ftpStream Close();       outputStream Close();       response Close();       catch (Exception ex)       MessageBox Show(ex Message);       

  上面的代码实现了从ftp服务器上下载文件的功能 这不同于之前所提到的上传功能 下载需要一个响应流 它包含着下载文件的内容 这个下载的文件是在FtpWebRequest对象中的uri指定的 在得到所请求的文件后 通过FtpWebRequest对象的GetResponse()方法下载文件 它将把文件作为一个流下载到你的客户端的机器上      注意 我们可以设置文件在我们本地机器上的存放路径和名称

cha138/Article/program/net/201311/13720

相关参考

知识大全 C# FTP操作类

C#FTP操作类  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  最近要做个用ftp读取文件并在浏

知识大全 ASP.NET 2.0中保证应用程序的安全

ASP.NET2.0中保证应用程序的安全  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  成员和角

知识大全 用Visual C# .NET开发简单的复合控件

用VisualC#.NET开发简单的复合控件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  内容

知识大全 用C#对ADO.NET数据库完成简单操作

用C#对ADO.NET数据库完成简单操作  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!数据库访问是

知识大全 ASP.NET 2.0程序的安全知识

ASP.NET2.0程序的安全知识  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  成员关系的概念

知识大全 详解.NET 2.0开发Winform程序经验

详解.NET2.0开发Winform程序经验  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  带有

知识大全 ASP.NET 2.0和Wrox United应用程序简介[1]

ASP.NET2.0和WroxUnited应用程序简介[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看

知识大全 ASP.NET 2.0和Wrox United应用程序简介[2]

ASP.NET2.0和WroxUnited应用程序简介[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看

知识大全 ASP.NET 2.0程序安全的基础知识

ASP.NET2.0程序安全的基础知识  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  成员关系的

知识大全 ASP.NET 2.0 中的异步页功能应用

ASP.NET2.0中的异步页功能应用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!ASPNET提