首页 > 代码库 > c# Ftp下载程序源码解析
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);//可以是ftp服务器的绝对路径也可以是相对路径
//URI 可以是相对的也可以是绝对的。如果 URI 的形式为 "ftp://contoso.com/%2fpath"(%2f 是转义字符“/”),则该 URI 是绝对的,而且当前目录为 /path。但是,如果 URI 的形式为 "ftp://contoso.com/path",首先 .NET Framework 登录到 FTP 服务器(使用由 Credentials 属性设置的用户名和密码),然后将当前目录设置为 <UserLoginDirectory>/path。
//uri不是url所以第一个文本框中应该输入ftp://url/cftea.txt
ftpRequest.Credentials = new NetworkCredential(textBox2.Text, textBox3.Text);
//您必须拥有服务器的有效用户名和密码,或者服务器必须允许匿名登录。可以通过设置 Credentials 属性来指定用于连接服务器的凭据,也可以将它们包含在传递给 Create 方法的 URI 的 UserInfo 部分中。如果 URI 中包含 UserInfo 信息,则使用指定的用户名和密码信息将 Credentials 属性设置为新的网络凭据。
//为基于密码的身份验证方案(如基本、简要、NTLM 和 Kerberos 身份验证)提供凭据。
//此类不支持基于公钥的身份验证方法,如安全套接字层 (SSL) 客户端身份验证
//public NetworkCredential(string userName,string password)
FtpWebResponse ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();
//若要访问 FTP 特定的属性,必须将此方法返回的 WebResponse 对象强制转换为 FtpWebResponse。
//返回 FTP 服务器响应。
//FtpWebResponse封装文件传输协议 (FTP) 服务器对请求的响应。
Stream data = http://www.mamicode.com/ftpResponse.GetResponseStream(); //通过响应对象获得响应流
//获取流,该流用于读取来自服务器的响应的体
//本程序中 检索包含从 FTP 服务器上发送的响应数据的流
//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流关闭
}
}
}
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);//可以是ftp服务器的绝对路径也可以是相对路径
//URI 可以是相对的也可以是绝对的。如果 URI 的形式为 "ftp://contoso.com/%2fpath"(%2f 是转义字符“/”),则该 URI 是绝对的,而且当前目录为 /path。但是,如果 URI 的形式为 "ftp://contoso.com/path",首先 .NET Framework 登录到 FTP 服务器(使用由 Credentials 属性设置的用户名和密码),然后将当前目录设置为 <UserLoginDirectory>/path。
//uri不是url所以第一个文本框中应该输入ftp://url/cftea.txt
ftpRequest.Credentials = new NetworkCredential(textBox2.Text, textBox3.Text);
//您必须拥有服务器的有效用户名和密码,或者服务器必须允许匿名登录。可以通过设置 Credentials 属性来指定用于连接服务器的凭据,也可以将它们包含在传递给 Create 方法的 URI 的 UserInfo 部分中。如果 URI 中包含 UserInfo 信息,则使用指定的用户名和密码信息将 Credentials 属性设置为新的网络凭据。
//为基于密码的身份验证方案(如基本、简要、NTLM 和 Kerberos 身份验证)提供凭据。
//此类不支持基于公钥的身份验证方法,如安全套接字层 (SSL) 客户端身份验证
//public NetworkCredential(string userName,string password)
FtpWebResponse ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();
//若要访问 FTP 特定的属性,必须将此方法返回的 WebResponse 对象强制转换为 FtpWebResponse。
//返回 FTP 服务器响应。
//FtpWebResponse封装文件传输协议 (FTP) 服务器对请求的响应。
Stream data = http://www.mamicode.com/ftpResponse.GetResponseStream(); //通过响应对象获得响应流
//获取流,该流用于读取来自服务器的响应的体
//本程序中 检索包含从 FTP 服务器上发送的响应数据的流
//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流关闭
}
}
}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。