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);//能夠是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流關閉
? ? ? ? }
? ? ? ? }
? }
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下载程序源代码解析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Activiti配置实例以及Spring
- 下一篇: Hibernate实体JSONObjec