using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.IO;

using System.Net;

using System.Threading.Tasks;

using System.Windows.Forms;





namespace 网络操作

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }





        private void menuStrip2_ItemClicked(object sender, ToolStripItemClickedEventArgs e)

        {





        }





        private void button1_Click_1(object sender, EventArgs e)

        {

            FtpWebRequest ftpRequest = (FtpWebRequest)WebRequest.Create(textBox1.Text);//能够是ftpserver的绝对路径也能够是相对路径

            //URI 能够是相对的也能够是绝对的。假设 URI 的形式为 "ftp://contoso.com/%2fpath"(%2f 是转义字符“/”),则该 URI 是绝对的,并且当前文件夹为 /path。可是,假设 URI 的形式为 "ftp://contoso.com/path",首先 .NET Framework 登录到 FTP server(使用由 Credentials 属性设置的username和password),然后将当前文件夹设置为 <UserLoginDirectory>/path。

            //uri不是url所以第一个文本框中应该输入ftp://url/cftea.txt

            ftpRequest.Credentials = new NetworkCredential(textBox2.Text, textBox3.Text);

            //您必须拥有server的有效username和password,或者server必须同意匿名登录。能够通过设置 Credentials 属性来指定用于连接server的凭据,也能够将它们包括在传递给 Create 方法的 URI 的 UserInfo 部分中。假设 URI 中包括 UserInfo 信息,则使用指定的username和password信息将 Credentials 属性设置为新的网络凭据。

            //为基于password的身份验证方案(如基本、简要、NTLM 和 Kerberos 身份验证)提供凭据。

            //此类不支持基于公钥的身份验证方法,如安全套接字层 (SSL) client身份验证

            //public NetworkCredential(string userName,string password)

            

            FtpWebResponse ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();

            //若要訪问 FTP 特定的属性,必须将此方法返回的 WebResponse 对象强制转换为 FtpWebResponse。

            //返回 FTP server响应。

            //FtpWebResponse封装文件传输协议 (FTP) server对请求的响应。





            Stream data = ftpResponse.GetResponseStream();  //通过响应对象获得响应流

            //获取流,该流用于读取来自server的响应的体

            //本程序中 检索包括从 FTP server上发送的响应数据的流

           //get方法的 返回值一个 Stream,包括响应的体。

            //GetResponseStream 方法从请求的 Internet 资源返回数据流。

            string str = textBox1.Text.Substring(textBox1.Text.LastIndexOf("/"), textBox1.Text.Length - textBox1.Text.LastIndexOf("/"));

            //函数參数1和參数2在 startIndex 处开头、长度为 length 的子字符串等效的一个字符串假设找到该字符,则为 value 的从零開始的索引位置;假设未找到,则为 -1。

            //str.length当前字符串中字符的数量。

            //  报告指定 Unicode 字符在此实例中的最后一个匹配项的从零開始的索引位置。(本例中为最后一个/的下标位置)

            //最后提取出的字符串为textBox1.Text去除/之前的字符

            string SavePath = str;

            if (File.Exists(SavePath))

            {

                File.Delete(str);

            }

            byte[] buffer = new byte[4096];

            FileStream stream = new FileStream(SavePath, FileMode.Create);

            //使用指定的路径和创建模式初始化 FileStream 类的新实例。由 .NET Compact Framework 支持。

            //摘要: 

            //指定操作系统应创建新文件。 假设文件已存在,它将被覆盖。 这须要 System.Security.Permissions.FileIOPermissionAccess.Write

             //权限。 FileMode.Create 等效于这种请求:假设文件不存在,则使用 System.IO.FileMode.CreateNew;否则使用

            //System.IO.FileMode.Truncate。 假设该文件已存在但为隐藏文件,则将引发 System.UnauthorizedAccessException异常。

            int count = 0;

            do

            {

                count = data.Read(buffer, 0, buffer.Length); //读取从ftp中获得的响应的数据流对象

                //public abstract int Read(byte[] buffer,int offset,int count)第一个參数为字节第二个为偏移量第三个为读取的字符数

                if (count > 0)

                {

                    stream.Write(buffer, 0, count);//參照read  

                    //这个是文件流对象通过从ftp中获得的数据流開始读取字符然后写入文件流来保存

                }

            } while (count > 0);

            //读入缓冲区中的总字节数。 假设当前可用的字节数没有请求的字节数那么多,

            //则总字节数可能小于请求的字节数,或者假设已到达流的末尾,则为零 (0)

            ftpResponse.Close();//上一句是打算将字符串读完,这一句是FtpWebResponse对象流关闭

            stream.Close();   //stream流关闭

        }





        }

  }

c# Ftp下载程序源代码解析的更多相关文章

  1. struts2 文件上传和下载,以及部分源代码解析

    struts2 文件上传 和部分源代码解析,以及一般上传原理 (1) 单文件上传 一.简单介绍 Struts2并未提供自己的请求解析器,也就是就Struts2不会自己去处理multipart/form ...

  2. ios的网络数据下载和json解析

    ios的网络数据下载和json解析 简介 在本文中,笔者将要给大家介绍如何使用nsurlconnection 从网上下载数据,以及解析json数据格式,以及如何显示数据和图片的异步下载显示. 涉及的知 ...

  3. ios 网络数据下载和JSON解析

    ios 网络数据下载和JSON解析 简介 在本文中笔者将要给大家介绍ios中如何利用NSURLConnection从网络上下载数据,如何解析下载下来的JSON数据格式,以及如何显示数据和图片的异步下载 ...

  4. ABAP表抛FTP通用程序

    主要功能: 1.支持R3所有表(标准.自建)下传,下传方式为FTP 2.支持输出字段选择及顺序调整 3.支持动态条件,不同的表会有不同的选择条件,根据不同的条件选择需要下传的数据 4.支持单表.多表. ...

  5. SDWebImage源代码解析(一)

    一.概念 SDWebImage是一个开源的第三方库,它提供了UIImageView的一个分类.以支持从远程server下载并缓存图片的功能. 二.优势 自从iOS5.0開始.NSURLCache也能够 ...

  6. android7.x Launcher3源代码解析(3)---workspace和allapps载入流程

    Launcher系列目录: 一.android7.x Launcher3源代码解析(1)-启动流程 二.android7.x Launcher3源代码解析(2)-框架结构 三.android7.x L ...

  7. SDWebImage源代码解析(二)

    上一篇:SDWebImage源代码解析(一) 2.缓存 为了降低网络流量的消耗.我们都希望下载下来的图片缓存到本地.下次再去获取同一张图片时.能够直接从本地获取,而不再从远程server获取.这样做的 ...

  8. 使用具体解释及源代码解析Android中的Adapter、BaseAdapter、ArrayAdapter、SimpleAdapter和SimpleCursorAdapter

    Adapter相当于一个数据源,能够给AdapterView提供数据.并依据数据创建相应的UI.能够通过调用AdapterView的setAdapter方法使得AdapterView将Adapter作 ...

  9. 使用 Socket 通信实现 FTP 客户端程序(来自IBM)

    FTP 客户端如 FlashFXP,File Zilla 被广泛应用,原理上都是用底层的 Socket 来实现.FTP 客户端与服务器端进行数据交换必须建立两个套接字,一个作为命令通道,一个作为数据通 ...

随机推荐

  1. 数据结构 《18》----RMQ 与 LCA 的等价性 (一)

    前言     RMQ: 数组 a0, a1, a2,..., an-1, 中求随意区间 a[i+1], a[i+2], ..., a[i+k] 的最小值     LCA: 求二叉树中两个节点的最低公共 ...

  2. Effective C++ Item 33 避免遮掩继承过来的名称

    本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie ? 不懂 c++为什么derived classes 内的名称要遮掩 base classe ...

  3. mysql copy复制拷贝表数据及结构的几种方式(转)

    mysql拷贝表操作我们会常常用到,下面就为您详细介绍几种mysql拷贝表的方式,希望对您学习mysql拷贝表方面能够有所帮助.假如我们有以下这样一个表:id username password--- ...

  4. muduo网络图书馆评测

    上个月看到朋友推荐mudo网络图书馆,该代码是在国内同行中,开源工程后.甚至钦佩.根据mudo手动和035代码的版本看起来正在建设中.感觉是一个比较成熟且易于使用的网络库.我的手也有自己的网络库,虽然 ...

  5. Excel阅读器NPOI

    什么是NPOI? NPOI 它是 POI 项目的 .NET 版本号. POI是一个开源的Java读写Excel.WORD等微软OLE2组件文档的项目. 使用 NPOI 你就能够在没有安装 Office ...

  6. 王立平--Unity综上所述控制

    GUILayout   Label 创建一个自己主动布局的标签. Box 创建一个自己主动布局的box. Button 创建一个单次button.当用户点击button会马上发生一些事件. Repea ...

  7. CSS 初探

    Css: 指层叠样式表 (Cascading Style Sheets),它是用来进行网页风格设计的.通俗的说就是进行网页美化的,没有html依然存在,多了css 它会更好.但是没有html,css就 ...

  8. ACE 主动对象模式的按部就班的实现方法

    ACE的主动对象模式的实现 对分布式系统设计来说,ACE提供的主动对象模式是让我们在系统框架构建的时候,回归到传统的单线程编程思维.你可能要问,既然有主动对象,那必然有被动对象,没有错,确实有被动对象 ...

  9. NSOperation 的使用(下载相关) 图片和文件都是能够的 断点续传 图片逐渐显示

    // // ImageDownloader.h // NSOperationTest // // Created by ydc on 11-10-29. // Copyright 2011年 __My ...

  10. Eclipse 打JAR包,插件FatJar 安装与使用

    下载fatJar插件,解压缩后是一个.../plugins/(net...)把plugins下面的(net..)文件夹拷贝到eclipse的plugins下,重新启动Eclipse3.1,Window ...