c# Ftp下载程序源代码解析
生活随笔
收集整理的這篇文章主要介紹了
c# Ftp下载程序源代码解析
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
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 網(wǎng)絡(luò)操作
{
? ? 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 能夠是相對的也能夠是絕對的。假設(shè) URI 的形式為 "ftp://contoso.com/%2fpath"(%2f 是轉(zhuǎn)義字符“/”),則該 URI 是絕對的,并且當(dāng)前文件夾為 /path。可是,假設(shè) URI 的形式為 "ftp://contoso.com/path",首先 .NET Framework 登錄到 FTP server(使用由 Credentials 屬性設(shè)置的username和password),然后將當(dāng)前文件夾設(shè)置為 <UserLoginDirectory>/path。
? ? ? ? ? ? //uri不是url所以第一個(gè)文本框中應(yīng)該輸入ftp://url/cftea.txt
? ? ? ? ? ? ftpRequest.Credentials = new NetworkCredential(textBox2.Text, textBox3.Text);
? ? ? ? ? ? //您必須擁有server的有效username和password,或者server必須同意匿名登錄。能夠通過設(shè)置 Credentials 屬性來指定用于連接server的憑據(jù),也能夠?qū)⑺鼈儼ㄔ趥鬟f給 Create 方法的 URI 的 UserInfo 部分中。假設(shè) URI 中包括 UserInfo 信息,則使用指定的username和password信息將 Credentials 屬性設(shè)置為新的網(wǎng)絡(luò)憑據(jù)。
? ? ? ? ? ? //為基于password的身份驗(yàn)證方案(如基本、簡要、NTLM 和 Kerberos 身份驗(yàn)證)提供憑據(jù)。
? ? ? ? ? ? //此類不支持基于公鑰的身份驗(yàn)證方法,如安全套接字層 (SSL) client身份驗(yàn)證
? ? ? ? ? ? //public NetworkCredential(string userName,string password)
? ? ? ? ? ??
? ? ? ? ? ? FtpWebResponse ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();
? ? ? ? ? ? //若要訪問 FTP 特定的屬性,必須將此方法返回的 WebResponse 對象強(qiáng)制轉(zhuǎn)換為 FtpWebResponse。
? ? ? ? ? ? //返回 FTP server響應(yīng)。
? ? ? ? ? ? //FtpWebResponse封裝文件傳輸協(xié)議 (FTP) server對請求的響應(yīng)。
? ? ? ? ? ? Stream data = ftpResponse.GetResponseStream(); ?//通過響應(yīng)對象獲得響應(yīng)流
? ? ? ? ? ? //獲取流,該流用于讀取來自server的響應(yīng)的體
? ? ? ? ? ? //本程序中 檢索包括從 FTP server上發(fā)送的響應(yīng)數(shù)據(jù)的流
? ? ? ? ? ?//get方法的 返回值一個(gè) Stream,包括響應(yīng)的體。
? ? ? ? ? ? //GetResponseStream 方法從請求的 Internet 資源返回?cái)?shù)據(jù)流。
? ? ? ? ? ? string str = textBox1.Text.Substring(textBox1.Text.LastIndexOf("/"), textBox1.Text.Length - textBox1.Text.LastIndexOf("/"));
? ? ? ? ? ? //函數(shù)參數(shù)1和參數(shù)2在 startIndex 處開頭、長度為 length 的子字符串等效的一個(gè)字符串假設(shè)找到該字符,則為 value 的從零開始的索引位置;假設(shè)未找到,則為 -1。
? ? ? ? ? ? //str.length當(dāng)前字符串中字符的數(shù)量。
? ? ? ? ? ? // ?報(bào)告指定 Unicode 字符在此實(shí)例中的最后一個(gè)匹配項(xiàng)的從零開始的索引位置。(本例中為最后一個(gè)/的下標(biāo)位置)
? ? ? ? ? ? //最后提取出的字符串為textBox1.Text去除/之前的字符
? ? ? ? ? ? string SavePath = str;
? ? ? ? ? ? if (File.Exists(SavePath))
? ? ? ? ? ? {
? ? ? ? ? ? ? ? File.Delete(str);
? ? ? ? ? ? }
? ? ? ? ? ? byte[] buffer = new byte[4096];
? ? ? ? ? ? FileStream stream = new FileStream(SavePath, FileMode.Create);
? ? ? ? ? ? //使用指定的路徑和創(chuàng)建模式初始化 FileStream 類的新實(shí)例。由 .NET Compact Framework 支持。
? ? ? ? ? ? //摘要:?
? ? ? ? ? ? //指定操作系統(tǒng)應(yīng)創(chuàng)建新文件。 假設(shè)文件已存在,它將被覆蓋。 這須要 System.Security.Permissions.FileIOPermissionAccess.Write
? ? ? ? ? ? ?//權(quán)限。 FileMode.Create 等效于這種請求:假設(shè)文件不存在,則使用 System.IO.FileMode.CreateNew;否則使用
? ? ? ? ? ? //System.IO.FileMode.Truncate。 假設(shè)該文件已存在但為隱藏文件,則將引發(fā) System.UnauthorizedAccessException異常。
? ? ? ? ? ? int count = 0;
? ? ? ? ? ? do
? ? ? ? ? ? {
? ? ? ? ? ? ? ? count = data.Read(buffer, 0, buffer.Length); //讀取從ftp中獲得的響應(yīng)的數(shù)據(jù)流對象
? ? ? ? ? ? ? ? //public abstract int Read(byte[] buffer,int offset,int count)第一個(gè)參數(shù)為字節(jié)第二個(gè)為偏移量第三個(gè)為讀取的字符數(shù)
? ? ? ? ? ? ? ? if (count > 0)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? stream.Write(buffer, 0, count);//參照read ?
? ? ? ? ? ? ? ? ? ? //這個(gè)是文件流對象通過從ftp中獲得的數(shù)據(jù)流開始讀取字符然后寫入文件流來保存
? ? ? ? ? ? ? ? }
? ? ? ? ? ? } while (count > 0);
? ? ? ? ? ? //讀入緩沖區(qū)中的總字節(jié)數(shù)。 假設(shè)當(dāng)前可用的字節(jié)數(shù)沒有請求的字節(jié)數(shù)那么多,
? ? ? ? ? ? //則總字節(jié)數(shù)可能小于請求的字節(jié)數(shù),或者假設(shè)已到達(dá)流的末尾,則為零 (0)
? ? ? ? ? ? ftpResponse.Close();//上一句是打算將字符串讀完,這一句是FtpWebResponse對象流關(guān)閉
? ? ? ? ? ? stream.Close(); ? //stream流關(guān)閉
? ? ? ? }
? ? ? ? }
? }
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 網(wǎng)絡(luò)操作
{
? ? 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 能夠是相對的也能夠是絕對的。假設(shè) URI 的形式為 "ftp://contoso.com/%2fpath"(%2f 是轉(zhuǎn)義字符“/”),則該 URI 是絕對的,并且當(dāng)前文件夾為 /path。可是,假設(shè) URI 的形式為 "ftp://contoso.com/path",首先 .NET Framework 登錄到 FTP server(使用由 Credentials 屬性設(shè)置的username和password),然后將當(dāng)前文件夾設(shè)置為 <UserLoginDirectory>/path。
? ? ? ? ? ? //uri不是url所以第一個(gè)文本框中應(yīng)該輸入ftp://url/cftea.txt
? ? ? ? ? ? ftpRequest.Credentials = new NetworkCredential(textBox2.Text, textBox3.Text);
? ? ? ? ? ? //您必須擁有server的有效username和password,或者server必須同意匿名登錄。能夠通過設(shè)置 Credentials 屬性來指定用于連接server的憑據(jù),也能夠?qū)⑺鼈儼ㄔ趥鬟f給 Create 方法的 URI 的 UserInfo 部分中。假設(shè) URI 中包括 UserInfo 信息,則使用指定的username和password信息將 Credentials 屬性設(shè)置為新的網(wǎng)絡(luò)憑據(jù)。
? ? ? ? ? ? //為基于password的身份驗(yàn)證方案(如基本、簡要、NTLM 和 Kerberos 身份驗(yàn)證)提供憑據(jù)。
? ? ? ? ? ? //此類不支持基于公鑰的身份驗(yàn)證方法,如安全套接字層 (SSL) client身份驗(yàn)證
? ? ? ? ? ? //public NetworkCredential(string userName,string password)
? ? ? ? ? ??
? ? ? ? ? ? FtpWebResponse ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();
? ? ? ? ? ? //若要訪問 FTP 特定的屬性,必須將此方法返回的 WebResponse 對象強(qiáng)制轉(zhuǎn)換為 FtpWebResponse。
? ? ? ? ? ? //返回 FTP server響應(yīng)。
? ? ? ? ? ? //FtpWebResponse封裝文件傳輸協(xié)議 (FTP) server對請求的響應(yīng)。
? ? ? ? ? ? Stream data = ftpResponse.GetResponseStream(); ?//通過響應(yīng)對象獲得響應(yīng)流
? ? ? ? ? ? //獲取流,該流用于讀取來自server的響應(yīng)的體
? ? ? ? ? ? //本程序中 檢索包括從 FTP server上發(fā)送的響應(yīng)數(shù)據(jù)的流
? ? ? ? ? ?//get方法的 返回值一個(gè) Stream,包括響應(yīng)的體。
? ? ? ? ? ? //GetResponseStream 方法從請求的 Internet 資源返回?cái)?shù)據(jù)流。
? ? ? ? ? ? string str = textBox1.Text.Substring(textBox1.Text.LastIndexOf("/"), textBox1.Text.Length - textBox1.Text.LastIndexOf("/"));
? ? ? ? ? ? //函數(shù)參數(shù)1和參數(shù)2在 startIndex 處開頭、長度為 length 的子字符串等效的一個(gè)字符串假設(shè)找到該字符,則為 value 的從零開始的索引位置;假設(shè)未找到,則為 -1。
? ? ? ? ? ? //str.length當(dāng)前字符串中字符的數(shù)量。
? ? ? ? ? ? // ?報(bào)告指定 Unicode 字符在此實(shí)例中的最后一個(gè)匹配項(xiàng)的從零開始的索引位置。(本例中為最后一個(gè)/的下標(biāo)位置)
? ? ? ? ? ? //最后提取出的字符串為textBox1.Text去除/之前的字符
? ? ? ? ? ? string SavePath = str;
? ? ? ? ? ? if (File.Exists(SavePath))
? ? ? ? ? ? {
? ? ? ? ? ? ? ? File.Delete(str);
? ? ? ? ? ? }
? ? ? ? ? ? byte[] buffer = new byte[4096];
? ? ? ? ? ? FileStream stream = new FileStream(SavePath, FileMode.Create);
? ? ? ? ? ? //使用指定的路徑和創(chuàng)建模式初始化 FileStream 類的新實(shí)例。由 .NET Compact Framework 支持。
? ? ? ? ? ? //摘要:?
? ? ? ? ? ? //指定操作系統(tǒng)應(yīng)創(chuàng)建新文件。 假設(shè)文件已存在,它將被覆蓋。 這須要 System.Security.Permissions.FileIOPermissionAccess.Write
? ? ? ? ? ? ?//權(quán)限。 FileMode.Create 等效于這種請求:假設(shè)文件不存在,則使用 System.IO.FileMode.CreateNew;否則使用
? ? ? ? ? ? //System.IO.FileMode.Truncate。 假設(shè)該文件已存在但為隱藏文件,則將引發(fā) System.UnauthorizedAccessException異常。
? ? ? ? ? ? int count = 0;
? ? ? ? ? ? do
? ? ? ? ? ? {
? ? ? ? ? ? ? ? count = data.Read(buffer, 0, buffer.Length); //讀取從ftp中獲得的響應(yīng)的數(shù)據(jù)流對象
? ? ? ? ? ? ? ? //public abstract int Read(byte[] buffer,int offset,int count)第一個(gè)參數(shù)為字節(jié)第二個(gè)為偏移量第三個(gè)為讀取的字符數(shù)
? ? ? ? ? ? ? ? if (count > 0)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? stream.Write(buffer, 0, count);//參照read ?
? ? ? ? ? ? ? ? ? ? //這個(gè)是文件流對象通過從ftp中獲得的數(shù)據(jù)流開始讀取字符然后寫入文件流來保存
? ? ? ? ? ? ? ? }
? ? ? ? ? ? } while (count > 0);
? ? ? ? ? ? //讀入緩沖區(qū)中的總字節(jié)數(shù)。 假設(shè)當(dāng)前可用的字節(jié)數(shù)沒有請求的字節(jié)數(shù)那么多,
? ? ? ? ? ? //則總字節(jié)數(shù)可能小于請求的字節(jié)數(shù),或者假設(shè)已到達(dá)流的末尾,則為零 (0)
? ? ? ? ? ? ftpResponse.Close();//上一句是打算將字符串讀完,這一句是FtpWebResponse對象流關(guān)閉
? ? ? ? ? ? stream.Close(); ? //stream流關(guān)閉
? ? ? ? }
? ? ? ? }
? }
總結(jié)
以上是生活随笔為你收集整理的c# Ftp下载程序源代码解析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Activiti配置实例以及Spring
- 下一篇: C#求数组中元素的全排列