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流关闭
}
}
}
c# Ftp下载程序源代码解析的更多相关文章
- struts2 文件上传和下载,以及部分源代码解析
struts2 文件上传 和部分源代码解析,以及一般上传原理 (1) 单文件上传 一.简单介绍 Struts2并未提供自己的请求解析器,也就是就Struts2不会自己去处理multipart/form ...
- ios的网络数据下载和json解析
ios的网络数据下载和json解析 简介 在本文中,笔者将要给大家介绍如何使用nsurlconnection 从网上下载数据,以及解析json数据格式,以及如何显示数据和图片的异步下载显示. 涉及的知 ...
- ios 网络数据下载和JSON解析
ios 网络数据下载和JSON解析 简介 在本文中笔者将要给大家介绍ios中如何利用NSURLConnection从网络上下载数据,如何解析下载下来的JSON数据格式,以及如何显示数据和图片的异步下载 ...
- ABAP表抛FTP通用程序
主要功能: 1.支持R3所有表(标准.自建)下传,下传方式为FTP 2.支持输出字段选择及顺序调整 3.支持动态条件,不同的表会有不同的选择条件,根据不同的条件选择需要下传的数据 4.支持单表.多表. ...
- SDWebImage源代码解析(一)
一.概念 SDWebImage是一个开源的第三方库,它提供了UIImageView的一个分类.以支持从远程server下载并缓存图片的功能. 二.优势 自从iOS5.0開始.NSURLCache也能够 ...
- android7.x Launcher3源代码解析(3)---workspace和allapps载入流程
Launcher系列目录: 一.android7.x Launcher3源代码解析(1)-启动流程 二.android7.x Launcher3源代码解析(2)-框架结构 三.android7.x L ...
- SDWebImage源代码解析(二)
上一篇:SDWebImage源代码解析(一) 2.缓存 为了降低网络流量的消耗.我们都希望下载下来的图片缓存到本地.下次再去获取同一张图片时.能够直接从本地获取,而不再从远程server获取.这样做的 ...
- 使用具体解释及源代码解析Android中的Adapter、BaseAdapter、ArrayAdapter、SimpleAdapter和SimpleCursorAdapter
Adapter相当于一个数据源,能够给AdapterView提供数据.并依据数据创建相应的UI.能够通过调用AdapterView的setAdapter方法使得AdapterView将Adapter作 ...
- 使用 Socket 通信实现 FTP 客户端程序(来自IBM)
FTP 客户端如 FlashFXP,File Zilla 被广泛应用,原理上都是用底层的 Socket 来实现.FTP 客户端与服务器端进行数据交换必须建立两个套接字,一个作为命令通道,一个作为数据通 ...
随机推荐
- 4pdf
http://www.cnblogs.com/haocool/archive/2013/03/16/2962547.html
- ASP.Net 重写IHttpModule 来拦截 HttpApplication 实现HTML资源压缩和空白过滤
务实直接上代码: 1. 重写FilterModule.cs using System; using System.Collections.Generic; using System.Linq; usi ...
- [Windows Phone 8]如何解决Lumia手机无法进入系统或开启?
原文:[Windows Phone 8]如何解决Lumia手机无法进入系统或开启? 摘要 相信有的人一定有遇过手机在更新的时候,齿轮转不停,过了好几小时还是一样,这就代表系统出现问题了,如今Nokia ...
- java中间==、equals和hashCode差额
java于==.equals().hashCode()和比较两个对象. 关于== ==是easy理解的.java设计java就是要比較两个对象是不是同一个对象. 对于引用变量而言.比較的时候两个引用变 ...
- Thinkphp编辑器扩展类kindeditor用法
一, 使用前的准备. 使用前请确认你已经建立好了一个Thinkphp站点项目. 1,Keditor.class.php和JSON.class.php 是编辑器扩展类文件,将他们拷贝到你的站点项目的Th ...
- 《Java程序书面采访猿收藏》之 instanceof的作用是什么
instanceof它是Java二元运算语言,它的作用是推断对象变量引用被指向的类型是一类(或接口.抽象类.父亲)示例.即,对象是否是它的一个实例离开它的类的权.返回boolean数据类型. 常见的使 ...
- effective c++ 条款11 Handle assignment to self in operator=
赋值给自己,听起来有些不可思议,但是却要引起重视,它很容易把自己隐藏起来. 例如 1 a[i]=a[j]; 如果 i, j的值一样? 2 *px=*py; 如果px py指向同一个object 3 ...
- Arcgis for Js之Graphiclayer扩展具体解释
在前两节,讲到了两种不同方式的聚类,一种是基于距离的,一种是基于区域范围的,两种不同的聚类都是通过扩展esri/layers/GraphicsLayer方法来实现的.在本节,就具体的讲讲esri/la ...
- iOS的图表显示的实现
在app通常有家居展览的照片,显示广告.或者头条新闻.通常网易新闻client 如图,红框框的位置就是一个典型的图展, 熟悉iOS的人肯定知道,这个是个UIScrollview,里面加几张图片就可以实 ...
- Android UI - 实现广告Banner旋转木马效果
Android UI - 实现广告Banner旋转木马效果 前言 本篇博客要分享的一个效果是实现广告Banner轮播效果,这个效果也比較常见,一些视频类应用就常常有,就拿360影视大全来举例吧: 用红 ...