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. It's only too late if you decide it is. Get busy living, or get busy dying(转)

    我们的身边是不是有这样的一群人,他们心肠不坏,容易感伤,但吐槽似乎是常有的事情,看着时下电视电影,说起哪些哪些自己的泪点.一般都是吃货,别人失眠的时候,TA可能在回忆自己刚做了什么梦.我不是要去评论这 ...

  2. text bss data的区别

    BSS段 在采用段式内存管理的架构中,BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域.BSS是英文Block Started by Symbol的简称.BSS ...

  3. [Unity3D]转让Android介面

    简单介绍 有一些手机功能.Unity没有提供对应的接口.比如震动,比如不锁屏,比如GPS.比如... 有太多的特殊功能Unity都没有提供接口.这时候,我们就须要通过使用Android原生的ADT编辑 ...

  4. Cocos2d-x项目总结中的一些遇到的问题

    这几天在用Cocos2D-X尝试着做一个小游戏,当然不是创新,仅仅是单纯的模仿,就是为了将自己这段时间学到的技术应用于实践中. 在这个过程中.遇到了一些问题,在此特做一些总结,以免以后遇到类似的问题. ...

  5. 数据结构 - trie

    #include <cstring> #include <iostream> #include <map> #include <cstdio> usin ...

  6. delegate实现Javascript的each方法

    C#如何用delegate实现Javascript的each方法   C#中有很多易混淆的关键词,例如delegate,Func, Action和 Predicate.Func, Action和 Pr ...

  7. POJ 1236 Network of Schools(强连通分量)

    POJ 1236 Network of Schools 题目链接 题意:题意本质上就是,给定一个有向图,问两个问题 1.从哪几个顶点出发,能走全全部点 2.最少连几条边,使得图强连通 思路: #inc ...

  8. CareerCup它1.8 串移包括问题

    [称号] 原文: 1.8 Assume you have a method isSubstring which checks if one word is a substring of another ...

  9. new TimerTask(robot)(转)

    import java.awt.Dimension; import java.awt.Robot; import java.awt.Toolkit; import java.io.PrintStrea ...

  10. pig询问top k,每个返回hour和ad_network_id最大的两个记录(SUBSTRING,order,COUNT_STAR,limit)

    pig里面有一个TOP功能.我不知道为什么用不了.有时间去看看pig源代码. SET job.name 'top_k'; SET job.priority HIGH; --REGISTER piggy ...