程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> c# Ftp下載程序源碼解析

c# Ftp下載程序源碼解析

編輯:C#入門知識

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 屬性設置的用戶名和密碼),然後將當前目錄設置為 /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 = 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流關閉
}


}
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved