c# Ftp下载程序源代码解析

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流关闭
        }


        }
  }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/460743.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Shell输入输出重定向

Unix 命令默认从标准输入设备(stdin)获取输入&#xff0c;将结果输出到标准输出设备(stdout)显示。一般情况下&#xff0c;标准输入设备就是键盘&#xff0c;标准输出设备就是终端&#xff0c;即显示器。 一、输出重定向 命令的输出不仅可以是显示器&#xff0c;还可以是其他文…

一个基于POP3协议进行邮箱账号验证的类

最近老陈要针对企业邮箱做一些开发&#xff0c;以对接企业OA神马的&#xff0c;但企业邮箱唯独没有开放账号密码验证功能&#xff0c;很恼火&#xff01;不得已&#xff0c;翻出早些年的Asp代码改编成了C#类&#xff0c;实现了一个C#下的通过POP3协议进行邮箱账号验证的类&…

cobbler get-loaders 通过代理下载

2019独角兽企业重金招聘Python工程师标准>>> cobbler 版本是2.6.3&#xff0c;可以通过系统环境变量设置proxy&#xff0c;支持 HTTP_PROXY、HTTPS_PROXY、FTP_PROXY 三个变量。 cobbler 版本是2.6.6时&#xff0c;需要从/etc/cobbler/settings 中增加proxy_url_ex…

Shell文件包含

像其他语言一样&#xff0c;Shell 也可以包含外部脚本&#xff0c;将外部脚本的内容合并到当前脚本。 Shell 中包含脚本可以使用&#xff1a; . filename 或者 source filename 两种方式的效果相同。简单起见&#xff0c;一般使用点号(.)&#xff0c;但是注意点号(.)和文件…

Vim高级使用 - CentOS下使用VIM打造C/C++开发环境

使用TagList http://blog.csdn.net/fbfsber008/article/details/7044723 转载于:https://www.cnblogs.com/tiantao/p/2389126.html

Shell数组:shell数组的定义、数组长度

bash支持一维数组&#xff08;不支持多维数组&#xff09;&#xff0c;并且没有限定数组的大小。类似与C语言&#xff0c;数组元素的下标由0开始编号。获取数组中的元素要利用下标&#xff0c;下标可以是整数或算术表达式&#xff0c;其值应大于或等于0。 定义数组 在Shell中…

分析busybox的源码

以下内容源于网络资源的学习与整理&#xff0c;如有侵权请告知删除。 参考博客 busybox详解_linuxarmsummary的博客-CSDN博客 一、前言 因为uboot给内核传参的bootargs中有“init/linuxrc”这个项目&#xff0c;而由前面的分析可知/linuxrc这个二进制文件位于根文件系统中&…

Vmware vSphere 十个疑难问题解决方法

Vmware vSphere疑难问题解决方法导读&#xff1a;这里汇总了10个Vmware vSphere常见的问题&#xff1a;清除vSphere Client的登录记录、Linux系统VMXNET3虚拟网路卡时UDP包被Drop掉等&#xff0c;并给出了具体的解决办法。关键词&#xff1a;VMware vSphere1、清除vSphere Clie…

PHP中开发的良好习惯总结(持续更新) By ACReaper

最近在自己用php在写一个商城&#xff0c;再这个工程中学习到了很多的开发经验。 1.为了更好的调试和开发php&#xff0c;在开发状态中到php.ini设置开发的错误报告 在ubuntu中&#xff0c;其在/etc/php5/apache2/php.ini中。用命令打开后&#xff0c;找到 error_reporting E_…

Makefile中常用的函数

以下内容源于C语言中文网的学习与整理&#xff0c;非原创&#xff0c;如有侵权请告知删除。 一、Makefile中的函数格式 函数的调用和变量的调用很像。引用变量的格式为$(变量名)&#xff0c;而函数调用的格式如下&#xff1a; $(<function> <arguments>) 或者是…

彻底解决zend studio 下 assignment in condition警告

最近在mac系统下安装zend studio作为php开发工具&#xff0c;把以前的代码导入&#xff0c;发现项目中有很多 “assignment in condition”的警告&#xff0c;造成原因是在条件判断的if、while中使用了如下类似的做法&#xff1a; if ($res $other)while (($row $res->fet…

添加分页

<div style"text-align: center; padding-top: 10px"><webdiyer:AspNetPager ID"AspNetPager1" runat"server" PageSize"20" FirstPageText"首页"CssClass"anpager" LastPageText"尾页" NextP…

Makefile中命令的编写

以下内容源于C语言中文网的学习与整理&#xff0c;非原创&#xff0c;如有侵权请告知删除。 简述 Makefile的规则&#xff0c;是由依赖关系规则和命令组成的。 Makefile中所使用的命令是由 shell 命令行组成&#xff0c;它们是一条一条执行的。 Makefile 中的任何命令都要以ta…

走出浮躁的泥沼:浮躁的社会原因 控制好自己的物欲

http://www.nowamagic.net/librarys/veda/detail/2265现在这个社会&#xff0c;大家都很浮躁。简单说&#xff0c;因为他是消费者。 具体的逻辑推理是这样的&#xff1a; 1. 现在的社会是一个“富裕社会”&#xff08;Affluent Society&#xff09;&#xff0c;物质极大丰富&am…

c# 连接各种数据库 Access、Server等

1.C#连接连接Access程序代码:usingSystem.Data;usingSystem.Data.OleDb;..stringstrConnection"ProviderMicrosoft.Jet.OleDb.4.0;";strConnection"Data SourceC:BegASPNETNorthwind.mdb";OleDbConnection objConnectionnewOleDbConnection(strConnection)…

make命令的参数选项

在执行 make 命令时&#xff0c;有时根据需要&#xff0c;可以添加某些参数选项。比如只打印命令但不执行命令的参数选项是 "-n" &#xff0c;还有只执命令不打印命令的参数选项是 "-s"&#xff0c;包含其它文件的路径参数选项是 "-include"等等…

〖Linux〗Kubuntu设置打开应用时就只在打开时的工作区显示

有没有遇到一种情况&#xff1a; 在工作区1打开了应用程序Google Chrome&#xff1b; 这个时间感觉它打开速度比较慢&#xff0c;就快捷键切换到工作区2了&#xff1b; 结果这个时候&#xff0c;Google Chrome就直接在工作区2打开&#xff0c;多不爽&#xff1f;&#xff01; &…

oracle 插入含字符串

1、创建表 SQL> create table t(id number,name varchar2(20)); 表已创建。 2、常规方式插入 SQL> insert into t values(1,’a&b’); 输入 b 的值: a&b 原值 1: insert into t values(1,’a&b’) 新值 1: insert into t values(1,’aa&b’) 已创建 1 行…

认识Makefile文件

以下内容源于C语言中文网的学习与整理&#xff0c;非原创&#xff0c;如有侵权请告知删除。 一、Makefile文件是什么 Makefile 文件描述了 Linux 系统下 C/C 工程文件的编译规则&#xff0c;比如某些文件是否需要编译、文件编译的顺序、文件间的依赖关系、文件是否需要重建等等…

搭建Spring MVC 4开发环境八步走

Spring MVC作为SpringFrameWork的产品&#xff0c;自诞生之日&#xff0c;就受到广泛开发者的关注&#xff0c;如今Spring MVC在Java中的发展可谓是蒸蒸日上&#xff0c;如今如果再有开发者说&#xff0c;不了解Spring MVC&#xff0c;或许就被人笑掉大牙。煽情的话就不说了&am…