摘要:本文简单的介绍了在.net 2.0下使用ftp的几种简单的方法,并提供了一个对FtpWebRequest封装的Ftp操作类

在.net 1.1中,如果我们要使用ftp,往往得借助一些第三方类库,虽然这些第三方类库写得也非常好,但说明文档不够详细,以及一些使用习惯问题,往往没有.net自己的库使用地得心应手。现在好了,在.net 2.0 中添加了对许多ftp的支持,使用ftp变得非常简单了。

首先,WebClient支以已经开始支持ftp协议了。

比如说要从远程服务器上下载文件,只要使用两条命令就可以完成。

WebClient webClient = new WebClient();

webClient.DownloadFile("ftp://username:password@192.168.1.1/123.txt", @"f:\123.txt");

上传文件到远程服务器也是一样简单。

WebClient webClient = new WebClient();

webClient.UploadFile("ftp://username:password@192.168.1.1/456.txt", @"f:\123.txt");

上述方法非常简单,并且在大多数情况下也非常有效,但在一些情况下,我们需要一些高级的应用,这时WebClient就不能满足我们的需求了(比如说我现在经常需要以ASII形式从Unix服务器中下载一些文本文件,如果直接WebClient下载就存在文本格式没有转换的问题)。这个时候我们便需要另一个类FtpWebRequest。

FtpWebRequest通过ftp协议从 Internet 请求数据。FtpWebRequest和HttpWebRequest一样,都是WebRequest的子类,都是基于.NET Framework 的请求/响应模型。下面的代码示例演示如何从 FTP 服务器上删除文件(代码来于MSDN)。

        public static bool DeleteFileOnServer(Uri serverUri)
        {
            // The serverUri parameter should use the ftp:// scheme. 
            // It contains the name of the server file that is to be deleted. 
            // Example: ftp://contoso.com/someFile.txt. 
            // 
            if (serverUri.Scheme != Uri.UriSchemeFtp)
            {
                return false;
            }
            // Get the object used to communicate with the server. 
            FtpWebRequest request = (FtpWebRequest)WebRequest.Create(serverUri);
            request.Method = WebRequestMethods.Ftp.DeleteFile;
            FtpWebResponse response = (FtpWebResponse)request.GetResponse();
            Console.WriteLine("Delete status: {0}", response.StatusDescription);
            response.Close();
            return true;
        }

从上述代码中我们可以看到,FtpWebRequest和HttpWebRequest的使用方式非常类似。只要将FtpWebRequest的 Method 属性设置为 WebRequestMethods.Ftp 结构中定义的值,就能发送相应的 FTP 命令到服务器,执行相应的操作。

关于ftp的更多信息,这里就不详作介绍,下面是我用FtpWebRequest对常用的操作进行了一点简单的封装,相信读了下列代码后会对FtpWebRequest有更多的了解的。

class FtpClient
    {
        string userName;
        string passWord;

        byte[] buffer = new byte[1024 * 20];

        public FtpClient(string userName, string passWord)
        {
            this.userName = userName;
            this.passWord = passWord;
        }

        /**//// <summary>
        /// 创建ftp请求信息
        /// </summary>
        /// <param name="url">目标url地址</param>
        /// <param name="useBinary">是否使用二进制传输</param>
        private FtpWebRequest GetRequest(string url, bool useBinary)
        {
            FtpWebRequest ftpRequest = (FtpWebRequest)WebRequest.Create(url);
            ftpRequest.Credentials = new NetworkCredential(userName, passWord);
            ftpRequest.UseBinary = useBinary;
            ftpRequest.KeepAlive = true;
            return ftpRequest;
        }

        private FtpWebRequest GetRequest(string url)
        {
            return GetRequest(url, false);
        }

        string GetStreamText(Stream stream)
        {
            StreamReader reader = new StreamReader(stream, Encoding.Default);
            string text = reader.ReadToEnd();
            reader.Close();
            return text;
        }

        //将orgStream中的内容拷贝到desStream中
        void WriteStream(Stream orgStream, Stream desStream)
        {
            int num;
            while ((num = orgStream.Read(buffer, 0, buffer.Length)) > 0)
            {
                desStream.Write(buffer, 0, num);
            }
            orgStream.Close();
            desStream.Close();
        }

        /**//// <summary>
        /// 列出ftp目录所包含的文件信息
        /// </summary>
        /// <param name="remoteDir">远程文件夹</param>
        /// <returns>文件详细信息</returns>
        public string ListFiles(string remoteDir)
        {
            FtpWebRequest request = GetRequest(remoteDir, false);
            request.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
            return GetStreamText(request.GetResponse().GetResponseStream());
        }

        /**//// <summary>
        /// 下载文件
        /// </summary>
        /// <param name="localFile">本地文件路径</param>
        /// <param name="remoteFile">远程文件路径</param>
        /// <param name="useBinary">是否采用二进制方式</param>
        public void DownloadFile(string localFile, string remoteFile, bool useBinary)
        {
            FtpWebRequest request = GetRequest(remoteFile, useBinary);
            request.Method = WebRequestMethods.Ftp.DownloadFile;

            WriteStream(request.GetResponse().GetResponseStream(), File.Create(localFile));
        }

        /**//// <summary>
        /// 上传文件
        /// </summary>
        /// <param name="localFile">本地文件路径</param>
        /// <param name="remoteFile">远程文件路径</param>
        /// <param name="useBinary">是否采用二进制方式</param>
        public void UploadFile(string localFile, string remoteFile, bool useBinary)
        {
            FileInfo fi = new FileInfo(localFile);
            FtpWebRequest request = GetRequest(remoteFile, useBinary);
            request.Method = WebRequestMethods.Ftp.UploadFile;
            request.ContentLength = fi.Length;

            WriteStream(fi.OpenRead(),request.GetRequestStream());
            request.GetResponse();
        }

        //删除文件
        public void DeleteFile(string remoteFile)
        {
            FtpWebRequest request = GetRequest(remoteFile);
            request.Method = WebRequestMethods.Ftp.DeleteFile;

            FtpWebResponse resp = request.GetResponse() as FtpWebResponse;
        }
    }

在.net 2.0 中使用ftp相关推荐

  1. NET 2.0中WinForm自定义的程序配置存放到哪里去了

    .NET 2.0中,WinForm应用程序的配置已经非常方便.默认情况下,我们可以利用Properties文件夹里默认的Settings.setting文件进行Application和User两个层级 ...

  2. ftp linux 开启验证_在linux中开启ftp服务

    1,首先,安装vsftpd组件 直接yum -y install vsftpd就行了 2,添加ftp用户 useradd ftpuser 3,给ftp用户添加密码 passwd ftpuser之需要输 ...

  3. linux的ftp停不下来了,FTP上传时经常中断,怎么办? 在Linux终端中使用ftp时总是出现connection refuse......

    导航:网站首页 > FTP上传时经常中断,怎么办? 在Linux终端中使用ftp时总是出现connection refuse... FTP上传时经常中断,怎么办? 在Linux终端中使用ftp时 ...

  4. JAVA 实现FTP功能_在Java程序中实现FTP功能

    本文来演示在JAVA编程中实现FTP功能的三个重要部分内容的源程序: FtpList部分是用来显示FTP上的文件; GetButton部分为从FTP下传一个文件; PutButton部分为向FTP服务 ...

  5. ftp文件传输 vscode_在vscode中配置ftp

    在vscode中配置ftp 安装ftp插件 在vscode扩展中搜索 FTP-Sync 并安装. 启用插件 在vscode 项目中按下F1按钮启动命令行工具,输入ftp ,选择 FTP-Sync:in ...

  6. VB6.0中创建和使用文本资源文件

    不少网友问及如何在VB中建立和使用文本资源文件.我想这也是很多VB初学者迫切想掌握的技巧.为此,将回答网友的信件整理了一下,形成此文,希望对大家有些帮助. 一.文本资源文件的建立 第一步:启动资源编辑 ...

  7. windows 命令行中 「ftp」「sftp」命令的使用

    ■前言1 连接IBM的 mainframe(大机) ■前言2 SSH登陆实现方式介绍(为什么SSH是安全的) A向B发送连接请求 B收到请求后,将自己的公钥发给A A收到公钥后,用公钥加密B的登陆密码 ...

  8. Win7下如何在windows资源管理器中打开FTP

    大家在使用网络的过程中,往往会登陆一些FTP站点,通过这些站点来下载一些软件,以前在IE6中,打开FTP后,就会直接看见文件夹,就如同打开本地硬盘一样,这样很直观也很容易操作.但是在IE8(家庭网络) ...

  9. Linux中的ftp命令怎么写,linux中的ftp命令用法

    Linux系统中的ftp命令功能强大,那么它的具体用法是怎样呢?下面由学习啦小编为大家整理了linux中的ftp命令用法相关知识,希望对大家有帮助! linux中的ftp命令用法 1. 连接ftp服务 ...

最新文章

  1. Could not initialize class org.jetbrains.kotlin.gradle.internal.KotlinSourceSetProviderImplKt
  2. 用开关控制蜂鸣器_室内照明控制系统的调试与检修
  3. 安装 | Anaconda3下载链接
  4. edit plus 中文插件_iMindMap手绘思维导图软件中文版
  5. intellij运行flink的wordcount实验-Java版本
  6. Linux shell命令最常用的快捷键
  7. Magento: 友好显示库存 User friendly product availability message in Magento
  8. Url几个常用的函数
  9. stl2xml.py 代码实现了stl格式转化为xml格式
  10. 阿里面试回答的认真总结
  11. 批量获取ip运营商_关于获取运营商的IP地址
  12. 机器学习7-主成分分析
  13. 取石子游戏,威佐夫博弈的推理
  14. ToC和ToB有啥区别
  15. matlab增加一行ones,MATLAB repmat()、ones()、zeros()、prod()函数的使用
  16. 大龄程序员找工作,为什么这么难?能力与年龄不匹配
  17. [Android系统原理及开发要点详解
  18. Wifi测速上下行不一致
  19. Vue项目之上传图片
  20. ACL最近三年论文整理(word embedding专题)

热门文章

  1. 无需在数据集上学习和预训练,这种图像修复新方法效果惊人 | 论文
  2. 李飞飞最新研究成果!斯坦福正在用算法判断政治倾向
  3. 云服务器的IT价值与部署分析
  4. demo08 关于SplitChunksPlugin
  5. 关于Linux学习的热身知识六
  6. PHP分组聊天室--fooking现实
  7. 安全上下文以及FACL
  8. Java NIO概述(1)
  9. PHP内核之旅-3.变量
  10. [Asp.net core]使用Polly网络请求异常重试