日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#FTP操作

發布時間:2023/12/10 C# 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#FTP操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? C# FTP操作類 收藏
using System;
using System.Collections;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Text.RegularExpressions;

namespace Discuz.Common
{
??? /// <summary>
??? /// FTP類
??? /// </summary>
??? public class FTP
??? {
??????? #region 變量聲明

??????? /// <summary>
??????? /// 服務器連接地址
??????? /// </summary>
??????? public string server;

??????? /// <summary>
??????? /// 登陸帳號
??????? /// </summary>
??????? public string user;

??????? /// <summary>
??????? /// 登陸口令
??????? /// </summary>
??????? public string pass;

??????? /// <summary>
??????? /// 端口號
??????? /// </summary>
??????? public int port;

??????? /// <summary>
??????? /// 無響應時間(FTP在指定時間內無響應)
??????? /// </summary>
??????? public int timeout;

??????? /// <summary>
??????? /// 服務器錯誤狀態信息
??????? /// </summary>
??????? public string errormessage;


??????? /// <summary>
??????? /// 服務器狀態返回信息
??????? /// </summary>
??????? private string messages;

??????? /// <summary>
??????? /// 服務器的響應信息
??????? /// </summary>
??????? private string responseStr;

??????? /// <summary>
??????? /// 鏈接模式(主動或被動,默認為被動)
??????? /// </summary>
??????? private bool passive_mode;

??????? /// <summary>
??????? /// 上傳或下載信息字節數
??????? /// </summary>
??????? private long bytes_total;

??????? /// <summary>
??????? /// 上傳或下載的文件大小
??????? /// </summary>
??????? private long file_size;

??????? /// <summary>
??????? /// 主套接字
??????? /// </summary>
??????? private Socket main_sock;

??????? /// <summary>
??????? /// 要鏈接的網絡地址終結點
??????? /// </summary>
??????? private IPEndPoint main_ipEndPoint;

??????? /// <summary>
??????? /// 偵聽套接字
??????? /// </summary>
??????? private Socket listening_sock;

??????? /// <summary>
??????? /// 數據套接字
??????? /// </summary>
??????? private Socket data_sock;

??????? /// <summary>
??????? /// 要鏈接的網絡數據地址終結點
??????? /// </summary>
??????? private IPEndPoint data_ipEndPoint;

??????? /// <summary>
??????? /// 用于上傳或下載的文件流對象
??????? /// </summary>
??????? private FileStream file;

??????? /// <summary>
??????? /// 與FTP服務器交互的狀態值
??????? /// </summary>
??????? private int response;

??????? /// <summary>
??????? /// 讀取并保存當前命令執行后從FTP服務器端返回的數據信息
??????? /// </summary>
??????? private string bucket;

??????? #endregion

??????? #region 構造函數

??????? /// <summary>
??????? /// 構造函數
??????? /// </summary>
??????? public FTP()
??????? {
??????????? server = null;
??????????? user = null;
??????????? pass = null;
??????????? port = 21;
??????????? passive_mode = true;
??????????? main_sock = null;
??????????? main_ipEndPoint = null;
??????????? listening_sock = null;
??????????? data_sock = null;
??????????? data_ipEndPoint = null;
??????????? file = null;
??????????? bucket = "";
??????????? bytes_total = 0;
??????????? timeout = 10000;??? //無響應時間為10秒
??????????? messages = "";
??????????? errormessage = "";
??????? }

??????? /// <summary>
??????? /// 構造函數
??????? /// </summary>
??????? /// <param name="server">服務器IP或名稱</param>
??????? /// <param name="user">登陸帳號</param>
??????? /// <param name="pass">登陸口令</param>
??????? public FTP(string server, string user, string pass)
??????? {
??????????? this.server = server;
??????????? this.user = user;
??????????? this.pass = pass;
??????????? port = 21;
??????????? passive_mode = true;
??????????? main_sock = null;
??????????? main_ipEndPoint = null;
??????????? listening_sock = null;
??????????? data_sock = null;
??????????? data_ipEndPoint = null;
??????????? file = null;
??????????? bucket = "";
??????????? bytes_total = 0;
??????????? timeout = 10000;??? //無響應時間為10秒
??????????? messages = "";
??????????? errormessage = "";
??????? }

??????? /// <summary>
??????? /// 構造函數
??????? /// </summary>
??????? /// <param name="server">服務器IP或名稱</param>
??????? /// <param name="port">端口號</param>
??????? /// <param name="user">登陸帳號</param>
??????? /// <param name="pass">登陸口令</param>
??????? public FTP(string server, int port, string user, string pass)
??????? {
??????????? this.server = server;
??????????? this.user = user;
??????????? this.pass = pass;
??????????? this.port = port;
??????????? passive_mode = true;
??????????? main_sock = null;
??????????? main_ipEndPoint = null;
??????????? listening_sock = null;
??????????? data_sock = null;
??????????? data_ipEndPoint = null;
??????????? file = null;
??????????? bucket = "";
??????????? bytes_total = 0;
??????????? timeout = 10000;??? //無響應時間為10秒
??????????? messages = "";
??????????? errormessage = "";
??????? }


??????? /// <summary>
??????? /// 構造函數
??????? /// </summary>
??????? /// <param name="server">服務器IP或名稱</param>
??????? /// <param name="port">端口號</param>
??????? /// <param name="user">登陸帳號</param>
??????? /// <param name="pass">登陸口令</param>
??????? /// <param name="mode">鏈接方式</param>
??????? public FTP(string server, int port, string user, string pass, int mode)
??????? {
??????????? this.server = server;
??????????? this.user = user;
??????????? this.pass = pass;
??????????? this.port = port;
??????????? passive_mode = mode <= 1 ? true : false;
??????????? main_sock = null;
??????????? main_ipEndPoint = null;
??????????? listening_sock = null;
??????????? data_sock = null;
??????????? data_ipEndPoint = null;
??????????? file = null;
??????????? bucket = "";
??????????? bytes_total = 0;
??????????? this.timeout = 10000;??? //無響應時間為10秒
??????????? messages = "";
??????????? errormessage = "";
??????? }

??????? /// <summary>
??????? /// 構造函數
??????? /// </summary>
??????? /// <param name="server">服務器IP或名稱</param>
??????? /// <param name="port">端口號</param>
??????? /// <param name="user">登陸帳號</param>
??????? /// <param name="pass">登陸口令</param>
??????? /// <param name="mode">鏈接方式</param>
??????? /// <param name="timeout">無響應時間(限時),單位:秒 (小于或等于0為不受時間限制)</param>
??????? public FTP(string server, int port, string user, string pass, int mode, int timeout_sec)
??????? {
??????????? this.server = server;
??????????? this.user = user;
??????????? this.pass = pass;
??????????? this.port = port;
??????????? passive_mode = mode <= 1 ? true : false;
??????????? main_sock = null;
??????????? main_ipEndPoint = null;
??????????? listening_sock = null;
??????????? data_sock = null;
??????????? data_ipEndPoint = null;
??????????? file = null;
??????????? bucket = "";
??????????? bytes_total = 0;
??????????? this.timeout = (timeout_sec <= 0) ? int.MaxValue : (timeout_sec * 1000);??? //無響應時間
??????????? messages = "";
??????????? errormessage = "";
??????? }

??????? #endregion

??????? #region 屬性
??????? /// <summary>
??????? /// 當前是否已連接
??????? /// </summary>
??????? public bool IsConnected
??????? {
??????????? get
??????????? {
??????????????? if (main_sock != null)
??????????????????? return main_sock.Connected;
??????????????? return false;
??????????? }
??????? }

??????? /// <summary>
??????? /// 當message緩沖區有數據則返回
??????? /// </summary>
??????? public bool MessagesAvailable
??????? {
??????????? get
??????????? {
??????????????? if (messages.Length > 0)
??????????????????? return true;
??????????????? return false;
??????????? }
??????? }

??????? /// <summary>
??????? /// 獲取服務器狀態返回信息, 并清空messages變量
??????? /// </summary>
??????? public string Messages
??????? {
??????????? get
??????????? {
??????????????? string tmp = messages;
??????????????? messages = "";
??????????????? return tmp;
??????????? }
??????? }
??????? /// <summary>
??????? /// 最新指令發出后服務器的響應
??????? /// </summary>
??????? public string ResponseString
??????? {
??????????? get
??????????? {
??????????????? return responseStr;
??????????? }
??????? }


??????? /// <summary>
??????? ///在一次傳輸中,發送或接收的字節數
??????? /// </summary>
??????? public long BytesTotal
??????? {
??????????? get
??????????? {
??????????????? return bytes_total;
??????????? }
??????? }

??????? /// <summary>
??????? ///被下載或上傳的文件大小,當文件大小無效時為0
??????? /// </summary>
??????? public long FileSize
??????? {
??????????? get
??????????? {
??????????????? return file_size;
??????????? }
??????? }

??????? /// <summary>
??????? /// 鏈接模式:
??????? /// true 被動模式 [默認]
??????? /// false: 主動模式
??????? /// </summary>
??????? public bool PassiveMode
??????? {
??????????? get
??????????? {
??????????????? return passive_mode;
??????????? }
??????????? set
??????????? {
??????????????? passive_mode = value;
??????????? }
??????? }

??????? #endregion

??????? #region 操作

??????? /// <summary>
??????? /// 操作失敗
??????? /// </summary>
??????? private void Fail()
??????? {
??????????? Disconnect();
??????????? errormessage += responseStr;
??????????? //throw new Exception(responseStr);
??????? }

??????? /// <summary>
??????? /// 下載文件類型
??????? /// </summary>
??????? /// <param name="mode">true:二進制文件 false:字符文件</param>
??????? private void SetBinaryMode(bool mode)
??????? {
??????????? if (mode)
??????????????? SendCommand("TYPE I");
??????????? else
??????????????? SendCommand("TYPE A");

??????????? ReadResponse();
??????????? if (response != 200)
??????????????? Fail();
??????? }

??????? /// <summary>
??????? /// 發送命令
??????? /// </summary>
??????? /// <param name="command"></param>
??????? private void SendCommand(string command)
??????? {
??????????? Byte[] cmd = Encoding.ASCII.GetBytes((command + "\r\n").ToCharArray());

??????????? if (command.Length > 3 && command.Substring(0, 4) == "PASS")
??????????? {
??????????????? messages = "\rPASS xxx";
??????????? }
??????????? else
??????????? {
??????????????? messages = "\r" + command;
??????????? }

??????????? try
??????????? {
??????????????? main_sock.Send(cmd, cmd.Length, 0);
??????????? }
??????????? catch (Exception ex)
??????????? {
??????????????? try
??????????????? {
??????????????????? Disconnect();
??????????????????? errormessage += ex.Message;
??????????????????? return;
??????????????? }
??????????????? catch
??????????????? {
??????????????????? main_sock.Close();
??????????????????? file.Close();
??????????????????? main_sock = null;
??????????????????? main_ipEndPoint = null;
??????????????????? file = null;
??????????????? }
??????????? }
??????? }


??????? private void FillBucket()
??????? {
??????????? Byte[] bytes = new Byte[512];
??????????? long bytesgot;
??????????? int msecs_passed = 0;

??????????? while (main_sock.Available < 1)
??????????? {
??????????????? System.Threading.Thread.Sleep(50);
??????????????? msecs_passed += 50;
??????????????? //當等待時間到,則斷開鏈接
??????????????? if (msecs_passed > timeout)
??????????????? {
??????????????????? Disconnect();
??????????????????? errormessage += "Timed out waiting on server to respond.";
??????????????????? return;
??????????????? }
??????????? }

??????????? while (main_sock.Available > 0)
??????????? {
??????????????? bytesgot = main_sock.Receive(bytes, 512, 0);
??????????????? bucket += Encoding.ASCII.GetString(bytes, 0, (int) bytesgot);
??????????????? System.Threading.Thread.Sleep(50);
??????????? }
??????? }


??????? private string GetLineFromBucket()
??????? {
??????????? int i;
??????????? string buf = "";

??????????? if ((i = bucket.IndexOf('\n')) < 0)
??????????? {
??????????????? while (i < 0)
??????????????? {
??????????????????? FillBucket();
??????????????????? i = bucket.IndexOf('\n');
??????????????? }
??????????? }

??????????? buf = bucket.Substring(0, i);
??????????? bucket = bucket.Substring(i + 1);

??????????? return buf;
??????? }


??????? /// <summary>
??????? /// 返回服務器端返回信息
??????? /// </summary>
??????? private void ReadResponse()
??????? {
??????????? string buf;
??????????? messages = "";

??????????? while (true)
??????????? {
??????????????? buf = GetLineFromBucket();

??????????????? if (Regex.Match(buf, "^[0-9]+ ").Success)
??????????????? {
??????????????????? responseStr = buf;
??????????????????? response = int.Parse(buf.Substring(0, 3));
??????????????????? break;
??????????????? }
??????????????? else
??????????????????? messages += Regex.Replace(buf, "^[0-9]+-", "") + "\n";
??????????? }
??????? }


??????? /// <summary>
??????? /// 打開數據套接字
??????? /// </summary>
??????? private void OpenDataSocket()
??????? {
??????????? if (passive_mode)
??????????? {
??????????????? string[] pasv;
??????????????? string server;
??????????????? int port;

??????????????? Connect();
??????????????? SendCommand("PASV");
??????????????? ReadResponse();
??????????????? if (response != 227)
??????????????????? Fail();

??????????????? try
??????????????? {
??????????????????? int i1, i2;

??????????????????? i1 = responseStr.IndexOf('(') + 1;
??????????????????? i2 = responseStr.IndexOf(')') - i1;
??????????????????? pasv = responseStr.Substring(i1, i2).Split(',');
??????????????? }
??????????????? catch (Exception)
??????????????? {
??????????????????? Disconnect();
??????????????????? errormessage += "Malformed PASV response: " + responseStr;
??????????????????? return;
??????????????? }

??????????????? if (pasv.Length < 6)
??????????????? {
??????????????????? Disconnect();
??????????????????? errormessage += "Malformed PASV response: " + responseStr;
??????????????????? return;
??????????????? }

??????????????? server = String.Format("{0}.{1}.{2}.{3}", pasv[0], pasv[1], pasv[2], pasv[3]);
??????????????? port = (int.Parse(pasv[4]) << 8) + int.Parse(pasv[5]);

??????????????? try
??????????????? {
??????????????????? CloseDataSocket();

??????????????????? data_sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

#if NET1
??????????????????? data_ipEndPoint = new IPEndPoint(Dns.GetHostByName(server).AddressList[0], port);
#else
??????????????????? data_ipEndPoint = new IPEndPoint(System.Net.Dns.GetHostEntry(server).AddressList[0], port);
#endif

??????????????????? data_sock.Connect(data_ipEndPoint);

??????????????? }
??????????????? catch (Exception ex)
??????????????? {
??????????????????? errormessage += "Failed to connect for data transfer: " + ex.Message;
??????????????????? return;
??????????????? }
??????????? }
??????????? else
??????????? {
??????????????? Connect();

??????????????? try
??????????????? {
??????????????????? CloseDataSocket();

??????????????????? listening_sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

??????????????????? // 對于端口,則發送IP地址.下面則提取相應信息
??????????????????? string sLocAddr = main_sock.LocalEndPoint.ToString();
??????????????????? int ix = sLocAddr.IndexOf(':');
??????????????????? if (ix < 0)
??????????????????? {
??????????????????????? errormessage += "Failed to parse the local address: " + sLocAddr;
??????????????????????? return;
??????????????????? }
??????????????????? string sIPAddr = sLocAddr.Substring(0, ix);
??????????????????? // 系統自動綁定一個端口號(設置 port = 0)
??????????????????? System.Net.IPEndPoint localEP = new IPEndPoint(IPAddress.Parse(sIPAddr), 0);

??????????????????? listening_sock.Bind(localEP);
??????????????????? sLocAddr = listening_sock.LocalEndPoint.ToString();
??????????????????? ix = sLocAddr.IndexOf(':');
??????????????????? if (ix < 0)
??????????????????? {
??????????????????????? errormessage += "Failed to parse the local address: " + sLocAddr;

??????????????????? }
??????????????????? int nPort = int.Parse(sLocAddr.Substring(ix + 1));

??????????????????? // 開始偵聽鏈接請求
??????????????????? listening_sock.Listen(1);
??????????????????? string sPortCmd = string.Format("PORT {0},{1},{2}",
??????????????????????????????????????????????????? sIPAddr.Replace('.', ','),
??????????????????????????????????????????????????? nPort / 256, nPort % 256);
??????????????????? SendCommand(sPortCmd);
??????????????????? ReadResponse();
??????????????????? if (response != 200)
??????????????????????? Fail();
??????????????? }
??????????????? catch (Exception ex)
??????????????? {
??????????????????? errormessage += "Failed to connect for data transfer: " + ex.Message;
??????????????????? return;
??????????????? }
??????????? }
??????? }


??????? private void ConnectDataSocket()
??????? {
??????????? if (data_sock != null)??????? // 已鏈接
??????????????? return;

??????????? try
??????????? {
??????????????? data_sock = listening_sock.Accept();??? // Accept is blocking
??????????????? listening_sock.Close();
??????????????? listening_sock = null;

??????????????? if (data_sock == null)
??????????????? {
??????????????????? throw new Exception("Winsock error: " +
??????????????????????? Convert.ToString(System.Runtime.InteropServices.Marshal.GetLastWin32Error()));
??????????????? }
??????????? }
??????????? catch (Exception ex)
??????????? {
??????????????? errormessage += "Failed to connect for data transfer: " + ex.Message;
??????????? }
??????? }


??????? private void CloseDataSocket()
??????? {
??????????? if (data_sock != null)
??????????? {
??????????????? if (data_sock.Connected)
??????????????? {
??????????????????? data_sock.Close();
??????????????? }
??????????????? data_sock = null;
??????????? }

??????????? data_ipEndPoint = null;
??????? }

??????? /// <summary>
??????? /// 關閉所有鏈接
??????? /// </summary>
??????? public void Disconnect()
??????? {
??????????? CloseDataSocket();

??????????? if (main_sock != null)
??????????? {
??????????????? if (main_sock.Connected)
??????????????? {
??????????????????? SendCommand("QUIT");
??????????????????? main_sock.Close();
??????????????? }
??????????????? main_sock = null;
??????????? }

??????????? if (file != null)
??????????????? file.Close();

??????????? main_ipEndPoint = null;
??????????? file = null;
??????? }

??????? /// <summary>
??????? /// 鏈接到FTP服務器
??????? /// </summary>
??????? /// <param name="server">要鏈接的IP地址或主機名</param>
??????? /// <param name="port">端口號</param>
??????? /// <param name="user">登陸帳號</param>
??????? /// <param name="pass">登陸口令</param>
??????? public void Connect(string server, int port, string user, string pass)
??????? {
??????????? this.server = server;
??????????? this.user = user;
??????????? this.pass = pass;
??????????? this.port = port;

??????????? Connect();
??????? }

??????? /// <summary>
??????? /// 鏈接到FTP服務器
??????? /// </summary>
??????? /// <param name="server">要鏈接的IP地址或主機名</param>
??????? /// <param name="user">登陸帳號</param>
??????? /// <param name="pass">登陸口令</param>
??????? public void Connect(string server, string user, string pass)
??????? {
??????????? this.server = server;
??????????? this.user = user;
??????????? this.pass = pass;

??????????? Connect();
??????? }

??????? /// <summary>
??????? /// 鏈接到FTP服務器
??????? /// </summary>
??????? public bool Connect()
??????? {
??????????? if (server == null)
??????????? {
??????????????? errormessage += "No server has been set.\r\n";
??????????? }
??????????? if (user == null)
??????????? {
??????????????? errormessage += "No server has been set.\r\n";
??????????? }

??????????? if (main_sock != null)
??????????????? if (main_sock.Connected)
??????????????????? return true;

??????????? try
??????????? {
??????????????? main_sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
#if NET1
??????????????? main_ipEndPoint = new IPEndPoint(Dns.GetHostByName(server).AddressList[0], port);
#else
??????????????? main_ipEndPoint = new IPEndPoint(System.Net.Dns.GetHostEntry(server).AddressList[0], port);
#endif

??????????????? main_sock.Connect(main_ipEndPoint);
??????????? }
??????????? catch (Exception ex)
??????????? {
??????????????? errormessage += ex.Message;
??????????????? return false;
??????????? }

??????????? ReadResponse();
??????????? if (response != 220)
??????????????? Fail();

??????????? SendCommand("USER " + user);
??????????? ReadResponse();

??????????? switch (response)
??????????? {
??????????? case 331:
??????????????? if (pass == null)
??????????????? {
??????????????????? Disconnect();
??????????????????? errormessage += "No password has been set.";
??????????????????? return false;
??????????????? }
??????????????? SendCommand("PASS " + pass);
??????????????? ReadResponse();
??????????????? if (response != 230)
??????????????? {
??????????????????? Fail();
??????????????????? return false;
??????????????? }
??????????????? break;
??????????? case 230:
??????????????? break;
??????????? }

??????????? return true;
??????? }

??????? /// <summary>
??????? /// 獲取FTP當前(工作)目錄下的文件列表
??????? /// </summary>
??????? /// <returns>返回文件列表數組</returns>
??????? public ArrayList List()
??????? {
??????????? Byte[] bytes = new Byte[512];
??????????? string file_list = "";
??????????? long bytesgot = 0;
??????????? int msecs_passed = 0;
??????????? ArrayList list = new ArrayList();

??????????? Connect();
??????????? OpenDataSocket();
??????????? SendCommand("LIST");
??????????? ReadResponse();

??????????? switch (response)
??????????? {
??????????? case 125:
??????????? case 150:
??????????????? break;
??????????? default:
??????????????? CloseDataSocket();
??????????????? throw new Exception(responseStr);
??????????? }
??????????? ConnectDataSocket();

??????????? while (data_sock.Available < 1)
??????????? {
??????????????? System.Threading.Thread.Sleep(50);
??????????????? msecs_passed += 50;

??????????????? if (msecs_passed > (timeout / 10))
??????????????? {
??????????????????? break;
??????????????? }
??????????? }

??????????? while (data_sock.Available > 0)
??????????? {
??????????????? bytesgot = data_sock.Receive(bytes, bytes.Length, 0);
??????????????? file_list += Encoding.ASCII.GetString(bytes, 0, (int) bytesgot);
??????????????? System.Threading.Thread.Sleep(50);
??????????? }

??????????? CloseDataSocket();

??????????? ReadResponse();
??????????? if (response != 226)
??????????????? throw new Exception(responseStr);

??????????? foreach (string f in file_list.Split('\n'))
??????????? {
??????????????? if (f.Length > 0 && !Regex.Match(f, "^total").Success)
??????????????????? list.Add(f.Substring(0, f.Length - 1));
??????????? }

??????????? return list;
??????? }

??????? /// <summary>
??????? /// 獲取到文件名列表
??????? /// </summary>
??????? /// <returns>返回文件名列表</returns>
??????? public ArrayList ListFiles()
??????? {
??????????? ArrayList list = new ArrayList();

??????????? foreach (string f in List())
??????????? {
??????????????? if ((f.Length > 0))
??????????????? {
??????????????????? if ((f[0] != 'd') && (f.ToUpper().IndexOf("<DIR>") < 0))
??????????????????????? list.Add(f);
??????????????? }
??????????? }

??????????? return list;
??????? }

??????? /// <summary>
??????? /// 獲取路徑列表
??????? /// </summary>
??????? /// <returns>返回路徑列表</returns>
??????? public ArrayList ListDirectories()
??????? {
??????????? ArrayList list = new ArrayList();

??????????? foreach (string f in List())
??????????? {
??????????????? if (f.Length > 0)
??????????????? {
??????????????????? if ((f[0] == 'd') || (f.ToUpper().IndexOf("<DIR>") >= 0))
??????????????????????? list.Add(f);
??????????????? }
??????????? }

??????????? return list;
??????? }

??????? /// <summary>
??????? /// 獲取原始數據信息.
??????? /// </summary>
??????? /// <param name="fileName">遠程文件名</param>
??????? /// <returns>返回原始數據信息.</returns>
??????? public string GetFileDateRaw(string fileName)
??????? {
??????????? Connect();

??????????? SendCommand("MDTM " + fileName);
??????????? ReadResponse();
??????????? if (response != 213)
??????????? {
??????????????? errormessage += responseStr;
??????????????? return "";
??????????? }

??????????? return (this.responseStr.Substring(4));
??????? }

??????? /// <summary>
??????? /// 得到文件日期.
??????? /// </summary>
??????? /// <param name="fileName">遠程文件名</param>
??????? /// <returns>返回遠程文件日期</returns>
??????? public DateTime GetFileDate(string fileName)
??????? {
??????????? return ConvertFTPDateToDateTime(GetFileDateRaw(fileName));
??????? }

??????? private DateTime ConvertFTPDateToDateTime(string input)
??????? {
??????????? if (input.Length < 14)
??????????????? throw new ArgumentException("Input Value for ConvertFTPDateToDateTime method was too short.");

??????????? //YYYYMMDDhhmmss":
??????????? int year = Convert.ToInt16(input.Substring(0, 4));
??????????? int month = Convert.ToInt16(input.Substring(4, 2));
??????????? int day = Convert.ToInt16(input.Substring(6, 2));
??????????? int hour = Convert.ToInt16(input.Substring(8, 2));
??????????? int min = Convert.ToInt16(input.Substring(10, 2));
??????????? int sec = Convert.ToInt16(input.Substring(12, 2));

??????????? return new DateTime(year, month, day, hour, min, sec);
??????? }

??????? /// <summary>
??????? /// 獲取FTP上的當前(工作)路徑
??????? /// </summary>
??????? /// <returns>返回FTP上的當前(工作)路徑</returns>
??????? public string GetWorkingDirectory()
??????? {
??????????? //PWD - 顯示工作路徑
??????????? Connect();
??????????? SendCommand("PWD");
??????????? ReadResponse();

??????????? if (response != 257)
??????????? {
??????????????? errormessage += responseStr;
??????????? }

??????????? string pwd;
??????????? try
??????????? {
??????????????? pwd = responseStr.Substring(responseStr.IndexOf("\"", 0) + 1);//5);
??????????????? pwd = pwd.Substring(0, pwd.LastIndexOf("\""));
??????????????? pwd = pwd.Replace("\"\"", "\""); // 替換帶引號的路徑信息符號
??????????? }
??????????? catch (Exception ex)
??????????? {
??????????????? errormessage += ex.Message;
??????????????? return null;
??????????? }

??????????? return pwd;
??????? }


??????? /// <summary>
??????? /// 跳轉服務器上的當前(工作)路徑
??????? /// </summary>
??????? /// <param name="path">要跳轉的路徑</param>
??????? public bool ChangeDir(string path)
??????? {
??????????? Connect();
??????????? SendCommand("CWD " + path);
??????????? ReadResponse();
??????????? if (response != 250)
??????????? {
??????????????? errormessage += responseStr;
??????????????? return false;
??????????? }
??????????? return true;
??????? }

??????? /// <summary>
??????? /// 創建指定的目錄
??????? /// </summary>
??????? /// <param name="dir">要創建的目錄</param>
??????? public void MakeDir(string dir)
??????? {
??????????? Connect();
??????????? SendCommand("MKD " + dir);
??????????? ReadResponse();

??????????? switch (response)
??????????? {
??????????? case 257:
??????????? case 250:
??????????????? break;
??????????? default:
??????????????? {
??????????????????? errormessage += responseStr;
??????????????????? break;
??????????????? }
??????????? }
??????? }

??????? /// <summary>
??????? /// 移除FTP上的指定目錄
??????? /// </summary>
??????? /// <param name="dir">要移除的目錄</param>
??????? public void RemoveDir(string dir)
??????? {
??????????? Connect();
??????????? SendCommand("RMD " + dir);
??????????? ReadResponse();
??????????? if (response != 250)
??????????? {
??????????????? errormessage += responseStr;
??????????????? return;
??????????????? ;
??????????? }
??????? }

??????? /// <summary>
??????? /// 移除FTP上的指定文件
??????? /// </summary>
??????? /// <param name="filename">要移除的文件名稱</param>
??????? public void RemoveFile(string filename)
??????? {
??????????? Connect();
??????????? SendCommand("DELE " + filename);
??????????? ReadResponse();
??????????? if (response != 250)
??????????? {
??????????????? errormessage += responseStr;
??????????? }
??????? }

??????? /// <summary>
??????? /// 重命名FTP上的文件
??????? /// </summary>
??????? /// <param name="oldfilename">原文件名</param>
??????? /// <param name="newfilename">新文件名</param>
??????? public void RenameFile(string oldfilename, string newfilename)
??????? {
??????????? Connect();
??????????? SendCommand("RNFR " + oldfilename);
??????????? ReadResponse();
??????????? if (response != 350)
??????????? {
??????????????? errormessage += responseStr;
??????????? }
??????????? else
??????????? {
??????????????? SendCommand("RNTO " + newfilename);
??????????????? ReadResponse();
??????????????? if (response != 250)
??????????????? {
??????????????????? errormessage += responseStr;
??????????????? }
??????????? }
??????? }

??????? /// <summary>
??????? /// 獲得指定文件的大小(如果FTP支持)
??????? /// </summary>
??????? /// <param name="filename">指定的文件</param>
??????? /// <returns>返回指定文件的大小</returns>
??????? public long GetFileSize(string filename)
??????? {
??????????? Connect();
??????????? SendCommand("SIZE " + filename);
??????????? ReadResponse();
??????????? if (response != 213)
??????????? {
??????????????? errormessage += responseStr;
??????????? }

??????????? return Int64.Parse(responseStr.Substring(4));
??????? }

??????? /// <summary>
??????? /// 上傳指定的文件
??????? /// </summary>
??????? /// <param name="filename">要上傳的文件</param>
??????? public bool OpenUpload(string filename)
??????? {
??????????? return OpenUpload(filename, filename, false);
??????? }

??????? /// <summary>
??????? /// 上傳指定的文件
??????? /// </summary>
??????? /// <param name="filename">本地文件名</param>
??????? /// <param name="remotefilename">遠程要覆蓋的文件名</param>
??????? public bool OpenUpload(string filename, string remotefilename)
??????? {
??????????? return OpenUpload(filename, remotefilename, false);
??????? }

??????? /// <summary>
??????? /// 上傳指定的文件
??????? /// </summary>
??????? /// <param name="filename">本地文件名</param>
??????? /// <param name="resume">如果存在,則嘗試恢復</param>
??????? public bool OpenUpload(string filename, bool resume)
??????? {
??????????? return OpenUpload(filename, filename, resume);
??????? }

??????? /// <summary>
??????? /// 上傳指定的文件
??????? /// </summary>
??????? /// <param name="filename">本地文件名</param>
??????? /// <param name="remote_filename">遠程要覆蓋的文件名</param>
??????? /// <param name="resume">如果存在,則嘗試恢復</param>
??????? public bool OpenUpload(string filename, string remote_filename, bool resume)
??????? {
??????????? Connect();
??????????? SetBinaryMode(true);
??????????? OpenDataSocket();

??????????? bytes_total = 0;

??????????? try
??????????? {
??????????????? file = new FileStream(filename, FileMode.Open);
??????????? }
??????????? catch (Exception ex)
??????????? {
??????????????? file = null;
??????????????? errormessage += ex.Message;
??????????????? return false;
??????????? }

??????????? file_size = file.Length;

??????????? if (resume)
??????????? {
??????????????? long size = GetFileSize(remote_filename);
??????????????? SendCommand("REST " + size);
??????????????? ReadResponse();
??????????????? if (response == 350)
??????????????????? file.Seek(size, SeekOrigin.Begin);
??????????? }

??????????? SendCommand("STOR " + remote_filename);
??????????? ReadResponse();

??????????? switch (response)
??????????? {
??????????? case 125:
??????????? case 150:
??????????????? break;
??????????? default:
??????????????? file.Close();
??????????????? file = null;
??????????????? errormessage += responseStr;
??????????????? return false;
??????????? }
??????????? ConnectDataSocket();

??????????? return true;
??????? }

??????? /// <summary>
??????? /// 下載指定文件
??????? /// </summary>
??????? /// <param name="filename">遠程文件名稱</param>
??????? public void OpenDownload(string filename)
??????? {
??????????? OpenDownload(filename, filename, false);
??????? }

??????? /// <summary>
??????? /// 下載并恢復指定文件
??????? /// </summary>
??????? /// <param name="filename">遠程文件名稱</param>
??????? /// <param name="resume">如文件存在,則嘗試恢復</param>
??????? public void OpenDownload(string filename, bool resume)
??????? {
??????????? OpenDownload(filename, filename, resume);
??????? }

??????? /// <summary>
??????? /// 下載指定文件
??????? /// </summary>
??????? /// <param name="filename">遠程文件名稱</param>
??????? /// <param name="localfilename">本地文件名</param>
??????? public void OpenDownload(string remote_filename, string localfilename)
??????? {
??????????? OpenDownload(remote_filename, localfilename, false);
??????? }

??????? /// <summary>
??????? /// 打開并下載文件
??????? /// </summary>
??????? /// <param name="remote_filename">遠程文件名稱</param>
??????? /// <param name="local_filename">本地文件名</param>
??????? /// <param name="resume">如果文件存在則恢復</param>
??????? public void OpenDownload(string remote_filename, string local_filename, bool resume)
??????? {
??????????? Connect();
??????????? SetBinaryMode(true);

??????????? bytes_total = 0;

??????????? try
??????????? {
??????????????? file_size = GetFileSize(remote_filename);
??????????? }
??????????? catch
??????????? {
??????????????? file_size = 0;
??????????? }

??????????? if (resume && File.Exists(local_filename))
??????????? {
??????????????? try
??????????????? {
??????????????????? file = new FileStream(local_filename, FileMode.Open);
??????????????? }
??????????????? catch (Exception ex)
??????????????? {
??????????????????? file = null;
??????????????????? throw new Exception(ex.Message);
??????????????? }

??????????????? SendCommand("REST " + file.Length);
??????????????? ReadResponse();
??????????????? if (response != 350)
??????????????????? throw new Exception(responseStr);
??????????????? file.Seek(file.Length, SeekOrigin.Begin);
??????????????? bytes_total = file.Length;
??????????? }
??????????? else
??????????? {
??????????????? try
??????????????? {
??????????????????? file = new FileStream(local_filename, FileMode.Create);
??????????????? }
??????????????? catch (Exception ex)
??????????????? {
??????????????????? file = null;
??????????????????? throw new Exception(ex.Message);
??????????????? }
??????????? }

??????????? OpenDataSocket();
??????????? SendCommand("RETR " + remote_filename);
??????????? ReadResponse();

??????????? switch (response)
??????????? {
??????????? case 125:
??????????? case 150:
??????????????? break;
??????????? default:
??????????????? file.Close();
??????????????? file = null;
??????????????? errormessage += responseStr;
??????????????? return;
??????????? }
??????????? ConnectDataSocket();

??????????? return;
??????? }

??????? /// <summary>
??????? /// 上傳文件(循環調用直到上傳完畢)
??????? /// </summary>
??????? /// <returns>發送的字節數</returns>
??????? public long DoUpload()
??????? {
??????????? Byte[] bytes = new Byte[512];
??????????? long bytes_got;

??????????? try
??????????? {
??????????????? bytes_got = file.Read(bytes, 0, bytes.Length);
??????????????? bytes_total += bytes_got;
??????????????? data_sock.Send(bytes, (int) bytes_got, 0);

??????????????? if (bytes_got <= 0)
??????????????? {
??????????????????? //上傳完畢或有錯誤發生
??????????????????? file.Close();
??????????????????? file = null;

??????????????????? CloseDataSocket();
??????????????????? ReadResponse();
??????????????????? switch (response)
??????????????????? {
??????????????????? case 226:
??????????????????? case 250:
??????????????????????? break;
??????????????????? default: //當上傳中斷時
??????????????????????? {
??????????????????????????? errormessage += responseStr;
??????????????????????????? return -1;
??????????????????????? }
??????????????????? }

??????????????????? SetBinaryMode(false);
??????????????? }
??????????? }
??????????? catch (Exception ex)
??????????? {
??????????????? file.Close();
??????????????? file = null;
??????????????? CloseDataSocket();
??????????????? ReadResponse();
??????????????? SetBinaryMode(false);
??????????????? //throw ex;
??????????????? //當上傳中斷時
??????????????? errormessage += ex.Message;
??????????????? return -1;
??????????? }

??????????? return bytes_got;
??????? }

??????? /// <summary>
??????? /// 下載文件(循環調用直到下載完畢)
??????? /// </summary>
??????? /// <returns>接收到的字節點</returns>
??????? public long DoDownload()
??????? {
??????????? Byte[] bytes = new Byte[512];
??????????? long bytes_got;

??????????? try
??????????? {
??????????????? bytes_got = data_sock.Receive(bytes, bytes.Length, 0);

??????????????? if (bytes_got <= 0)
??????????????? {
??????????????????? //下載完畢或有錯誤發生
??????????????????? CloseDataSocket();
??????????????????? file.Close();
??????????????????? file = null;

??????????????????? ReadResponse();
??????????????????? switch (response)
??????????????????? {
??????????????????? case 226:
??????????????????? case 250:
??????????????????????? break;
??????????????????? default:
??????????????????????? {
??????????????????????????? errormessage += responseStr;
??????????????????????????? return -1;
??????????????????????? }
??????????????????? }

??????????????????? SetBinaryMode(false);

??????????????????? return bytes_got;
??????????????? }

??????????????? file.Write(bytes, 0, (int) bytes_got);
??????????????? bytes_total += bytes_got;
??????????? }
??????????? catch (Exception ex)
??????????? {
??????????????? CloseDataSocket();
??????????????? file.Close();
??????????????? file = null;
??????????????? ReadResponse();
??????????????? SetBinaryMode(false);
??????????????? //throw ex;
??????????????? //當下載中斷時
??????????????? errormessage += ex.Message;
??????????????? return -1;
??????????? }

??????????? return bytes_got;
??????? }

??????? #endregion
??? }
}簡單使用示例:using System;
using System.Collections;
using System.IO;
using Discuz.Common;

namespace Test
{
??? class TestFtp
??? {
??????? public void Test()
??????? {
??????????? FTP ftp = new FTP("127.0.0.1", "abc", "123456");

??????????? //建立文件夾
??????

    ftp.MakeDir("com");
??????????? ftp.ChangeDir("com");
??????????? ftp.MakeDir("mzwu");
??????????? ftp.ChangeDir("mzwu");

??????????? //文件夾列表
??????????? ArrayList list =???ftp.ListDirectories();

??????????? for (int i = 0; i < list.Count; i++)
??????????? {
??????????????? Console.WriteLine(list[i].ToString() + "<br/>");
??????????? }

??????????? //刪除文件夾(不能直接刪除非空文件夾)
???????????ftp.RemoveDir("com\\mzwu");
??????????? //上傳文件
???????????? ftp.Connect();
???????????? ftp.OpenUpload(@"F:\mzwucom.jpg", Path.GetFileName(@"F:\mzwucom.jpg"));
??????????? while (ftp.DoUpload() > 0)
??????????? {
??????????????? int perc = (int) (((ftp.BytesTotal) * 100) / http://www.cnblogs.com/MikeChen/admin/ftp://ftp.filesize/);
??????????????? Console.WriteLine(perc.ToString() + "%<br/>");
??????????? }
??????????? ftp.Disconnect();

??????????? //下載文件
??????????? http://www.cnblogs.com/MikeChen/admin/ftp://ftp.connect/();
??????????? http://www.cnblogs.com/MikeChen/admin/ftp://ftp.opendownload(%22mzwucom.jpg/", @"E:\mzwucom.jpg");
??????????? while (http://www.cnblogs.com/MikeChen/admin/ftp://ftp.dodownload/() > 0)
??????????? {
??????????????? int perc = (int) (((http://www.cnblogs.com/MikeChen/admin/ftp://ftp.bytestotal/) * 100) / http://www.cnblogs.com/MikeChen/admin/ftp://ftp.filesize/);
??????????????? Console.WriteLine(perc.ToString() + "%<br/>");
??????????? }
??????????? http://www.cnblogs.com/MikeChen/admin/ftp://ftp.disconnect/();

??????????? //文件列表
???????????? list = http://www.cnblogs.com/MikeChen/admin/ftp://ftp.listfiles/();
??????????? for (int i = 0; i < list.Count; i++)
??????????? {
??????????????? Console.WriteLine(list[i].ToString() + "<br/>");
??????????? }

??????????? //文件重命名
??????????? http://www.cnblogs.com/MikeChen/admin/ftp://ftp.renamefile(%22mzwucom.jpg/", "test.jpg");

??????????? //刪除文件
??????????? http://www.cnblogs.com/MikeChen/admin/ftp://ftp.removefile(%22test.jpg/");

??????????? //顯示錯誤信息
??????????? Console.WriteLine(http://www.cnblogs.com/MikeChen/admin/ftp://ftp.errormessage/);
??????? }

??? }
}

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/daqiaonanlu2000/archive/2010/03/30/5431776.aspx

轉載于:https://www.cnblogs.com/MikeChen/archive/2010/05/28/1746406.html

總結

以上是生活随笔為你收集整理的C#FTP操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

欧美精品一二三 | 亚洲精品国产精品国产 | 国产高清黄 | 国产精品黄色在线观看 | 亚洲理论片 | 国产视频在线观看一区二区 | 日韩欧美国产精品 | 国产精品日韩久久久久 | 色综合久久66 | 一区二区三区日韩精品 | 99精品视频在线观看免费 | 成人a毛片 | 中日韩欧美精彩视频 | 国产免费三级在线观看 | 欧美专区国产专区 | 91热视频在线观看 | 成人免费在线观看入口 | 日日爱网址| 免费黄色看片 | 欧美在线不卡一区 | 高清一区二区三区 | 亚洲精品在线免费 | 91精品办公室少妇高潮对白 | 黄色网在线播放 | 超级碰碰视频 | 欧美日韩精品在线免费观看 | 特级西西444www大胆高清无视频 | 日韩在观看线 | 黄色av免费看| 日韩在线视频精品 | 欧美精品在线观看一区 | 亚洲精品视频一 | 国产1区2 | 午夜av在线电影 | 中文字幕av免费 | 国产精品男女视频 | 草久在线视频 | 在线观看第一页 | 在线观看免费黄色 | 69视频在线播放 | 五月婷丁香网 | 欧美日韩一区二区免费在线观看 | 99久久精品日本一区二区免费 | 成人小视频在线播放 | av成人资源| 亚洲欧美日韩一级 | 伊人春色电影网 | 777奇米四色 | 天天透天天插 | 夜夜躁日日躁狠狠久久88av | 国产乱码精品一区二区蜜臀 | 中文字幕观看视频 | 国产精品a久久 | a级片在线播放 | 亚洲精品www久久久久久 | 亚洲国产经典视频 | 国产精品美女999 | 色综合天天| 国产麻豆成人传媒免费观看 | 久久综合九色综合欧美就去吻 | av免费网站在线观看 | 天天色天天射天天操 | 国产精品久久二区 | 亚洲天天做| 国产资源精品在线观看 | 国产馆在线播放 | 黄色精品在线看 | 日韩高清www| 色偷偷男人的天堂av | 丝袜护士aⅴ在线白丝护士 天天综合精品 | 精品亚洲免费 | 国内精品视频在线 | 国产涩涩网站 | 91久久久久久国产精品 | 久保带人 | 99精品免费观看 | 久久a国产 | 天天舔天天射天天操 | 婷婷色在线播放 | 99视频在线精品 | 99精品视频免费看 | 亚洲欧洲av在线 | www国产亚洲精品久久网站 | 久久电影国产免费久久电影 | 91中文字幕一区 | 一区二区三区不卡在线 | 国产精品成人av久久 | 成人黄在线| 激情视频在线观看网址 | 中文字幕亚洲精品日韩 | 日韩黄视频 | 人人草网站 | 美女国产免费 | 中文不卡视频 | 日韩 精品 一区 国产 麻豆 | 欧美精品中文在线免费观看 | 久久在线免费观看视频 | 成人国产网站 | 在线之家免费在线观看电影 | 天天插伊人 | 国产精品青草综合久久久久99 | 大荫蒂欧美视频另类xxxx | 中文字幕一区二区三区四区久久 | 视频二区在线 | 国产精品成人久久久 | 国产a国产 | 久影院| 久热av在线| 亚洲午夜精品一区 | 一本一道波多野毛片中文在线 | 9999国产精品 | 在线观看一区视频 | 日韩久久精品一区二区三区 | 99热 精品在线 | 日韩欧美一区二区在线观看 | 99这里只有久久精品视频 | 亚洲乱码国产乱码精品天美传媒 | 国产亚洲va综合人人澡精品 | 黄色日本片| 国产精品黑丝在线观看 | 久久一级电影 | 国产在线资源 | av免费播放 | 久久伦理视频 | 91麻豆精品国产91久久久久久久久 | 色老板在线视频 | 午夜在线观看一区 | 亚洲一区二区91 | 91探花视频| 99精品99 | 一级黄色片在线观看 | 欧洲激情在线 | 国产小视频免费在线观看 | 国产视频精品久久 | 天天操天天操天天操天天操天天操天天操 | 激情中文在线 | 欧美大片第1页 | 国产亚洲精品久久久久久电影 | 伊人天天色 | 四虎在线观看 | 精品在线免费观看 | 91看国产| 91福利视频久久久久 | 少妇搡bbb | 韩日成人av | 黄色一级大片在线免费看产 | 日韩av中文在线观看 | 天天干天天插伊人网 | 亚洲黄色免费在线 | 中文字幕免费在线 | 91成人免费视频 | 亚洲黄在线观看 | 久久精品高清视频 | 久久久久国产精品一区二区 | 久久久久激情电影 | 香蕉视频亚洲 | 亚洲人成综合 | 欧美精品免费在线观看 | 国内精品在线一区 | 悠悠av资源片 | 成人av动漫在线 | 午夜精品久久久久久99热明星 | 日韩在线高清免费视频 | 日本特黄一级片 | 香蕉久草在线 | 色99之美女主播在线视频 | 五月天伊人网 | 国产高清视频网 | 久久伊人综合 | 天天操天天射天天操 | 美女视频网站久久 | 在线免费观看麻豆 | 国产视频2区 | 国内三级在线观看 | 久久人视频| 精品国产乱码久久久久久浪潮 | 91看片麻豆 | 草久在线视频 | 96超碰在线 | 免费看片色 | 日韩在线视频看看 | 国产v欧美 | 国产啊v在线 | 欧洲高潮三级做爰 | www.91av在线| 成人免费观看视频大全 | 欧美精品乱码久久久久 | 久久国产午夜精品理论片最新版本 | 91精品国自产在线 | 激情网在线视频 | 天堂av中文字幕 | 91插插视频 | 亚洲高清在线观看视频 | 99re在线视频观看 | 久青草影院 | 久久精品人| 亚洲天堂网视频在线观看 | 激情五月av | 五月综合网 | 国产成人av网 | 欧美久久久久久久久久久 | 天天操婷婷 | www色| 99中文视频在线 | 激情视频在线观看网址 | 国产精品久久久av | 久草在线最新 | 欧美一区二区在线刺激视频 | 欧美久久九九 | 黄色特级一级片 | 97福利在线 | 国产又黄又爽又猛视频日本 | 99视频免费在线观看 | 国产xxxx做受性欧美88 | 久影院| 久久婷婷综合激情 | 夜夜夜精品 | 久久久久久国产精品久久 | 国产精品视频地址 | av经典在线| 激情偷乱人伦小说视频在线观看 | 福利视频入口 | 手机看片福利 | 婷婷综合成人 | 亚洲91精品在线观看 | 久久激情小视频 | 婷婷社区五月天 | 成人综合日日夜夜 | 精品视频中文字幕 | 日韩毛片一区 | 久草在线视频资源 | 国产一区在线免费观看视频 | 久久理论电影网 | 国产护士hd高朝护士1 | 久久国产高清 | 在线黄色av | 亚洲国产精品成人女人久久 | 久久综合偷偷噜噜噜色 | 欧美精品在线观看 | 丁香九月激情综合 | 又色又爽的网站 | 欧美精品做受xxx性少妇 | 久久久久夜色 | 超碰日韩在线 | 成人天堂网| 中文字幕乱码一区二区 | 狠狠干综合 | 色综合久久悠悠 | 天天干天天干天天干 | 免费日韩 精品中文字幕视频在线 | avav99| av网址aaa| 久插视频| 欧洲一区二区三区精品 | 欧美人体xx | 国产精品1区2区3区 久久免费视频7 | 久久免费成人网 | www.xxx.性狂虐 | 色综合久久久 | 免费看黄在线观看 | 天天玩天天操天天射 | 成人av电影免费观看 | 精品久久一区 | 在线播放 日韩专区 | 91伊人影院| 三级黄色免费 | 免费久久99精品国产 | 日日夜夜噜噜噜 | 免费观看第二部31集 | 久久国产精品99久久久久 | 国产麻豆精品久久一二三 | 国产精品久久久久三级 | 天堂在线一区二区 | 亚洲视频精品 | 91黄色成人 | 色噜噜日韩精品欧美一区二区 | 91视频在线免费观看 | 亚洲乱码久久 | 久久再线视频 | 国产黄色片免费 | 免费人成在线观看网站 | 日本女人逼 | 久久精品网站免费观看 | 国产精品美女视频网站 | 午夜国产一区二区 | 97精品久久人人爽人人爽 | 天天爽综合网 | www.久久色| 欧美性久久久 | 色婷婷电影网 | 亚洲精品在线观看的 | 国产五月色婷婷六月丁香视频 | 婷婷精品国产欧美精品亚洲人人爽 | 国产系列在线观看 | 91人人射 | 96精品高清视频在线观看软件特色 | 国产一级二级在线观看 | 国产不卡网站 | 亚洲综合色av | 国产69精品久久久久久久久久 | 国产精品99久久久久久小说 | 黄色在线小网站 | 久久人人添人人爽添人人88v | 久久精品网站免费观看 | 国产专区免费 | 97电影手机 | 国产精品ⅴa有声小说 | 99色在线观看视频 | 亚洲最大的av网站 | 成年人免费观看在线视频 | 国产黄色免费观看 | 在线观看中文 | 亚洲国产三级在线 | 精品产品国产在线不卡 | 久久男女视频 | 99视频在线免费播放 | 欧美精品免费在线 | 午夜精品剧场 | www色网站 | 亚洲精品91天天久久人人 | 久操免费视频 | 亚洲精品国产成人av在线 | 国产成人精品一区二 | 亚洲免费观看视频 | 国产精品久久艹 | 午夜久久久久久久久久影院 | 中文字幕在线免费观看 | 狠狠色丁香婷婷综合橹88 | 99久久久久久 | 91大片网站 | 亚洲天堂在线观看完整版 | 在线免费观看视频一区 | 国产精品久久久久久久久免费 | 亚洲欧美视屏 | 91精品啪在线观看国产线免费 | 色网影音先锋 | 中文字幕在线观看免费高清完整版 | 男女视频国产 | 亚洲视屏一区 | 一区久久久| 久久久久久国产精品 | 91喷水 | 在线色亚洲 | 免费福利视频网 | 一级a毛片高清视频 | 欧美一级裸体视频 | 91在线亚洲 | 97成人在线观看视频 | 亚洲国产精品va在线看黑人 | 午夜婷婷在线观看 | 久久超级碰 | 黄色片免费在线 | 国产精品第二十页 | 亚洲欧洲成人精品av97 | 日本一区二区三区免费观看 | 日韩色一区二区三区 | 91亚瑟视频| 在线色亚洲| 欧美日韩免费在线观看视频 | 久久99精品久久只有精品 | 91久久国产自产拍夜夜嗨 | 亚洲高清在线视频 | 久久综合网色—综合色88 | 国产精品ssss在线亚洲 | 又长又大又黑又粗欧美 | 中文字幕在线看人 | 日韩美在线 | 亚洲精选在线 | 国产精品久久9 | www色综合 | 91在线视频免费播放 | 国产精品久久久久久久久久了 | 午夜精品999 | 日韩国产精品久久久久久亚洲 | 国产午夜精品一区二区三区 | 成人久久久电影 | 国产五码一区 | 精品视频久久 | 亚洲精品视频在线观看免费视频 | 天天草网站 | 亚洲aⅴ在线| 超碰免费公开 | 亚洲年轻女教师毛茸茸 | 91漂亮少妇露脸在线播放 | 久久高清 | 狠狠精品 | 国产成人av一区二区三区在线观看 | 天天摸天天操天天舔 | 亚洲人人av | 一区二区三区影院 | 国产经典三级 | 超碰在线cao | 日韩精品免费在线观看视频 | 中文字幕乱码在线播放 | 绯色av一区 | 亚洲久草视频 | 国产成人精品aaa | 国产精品18久久久久久vr | 午夜精品久久久99热福利 | 精品亚洲欧美一区 | 欧美日在线 | 91看片淫黄大片在线播放 | 亚洲狠狠丁香婷婷综合久久久 | 亚洲免费精彩视频 | 日韩中文在线视频 | 麻豆视频在线 | 人人爽人人爽 | 欧美日韩裸体免费视频 | 97人人人人 | 精品久久久久久久久久久久久 | 三级a毛片| 天天鲁天天干天天射 | 久草在线手机观看 | 中文字幕视频一区二区 | 午夜久久久久久久久久影院 | 欧美一级电影在线观看 | 国产精品毛片久久久久久久 | 国产日韩中文字幕 | 国产在线a不卡 | 国产免费成人av | 91精品福利在线 | 天天操天天透 | 97理论电影 | 成人在线观看网址 | 国产精品成人一区 | 在线成人观看 | 91精品第一页 | 99免费视频 | 成人手机在线视频 | 少妇搡bbbb搡bbb搡aa | 狠狠狠色丁香综合久久天下网 | 日日碰狠狠添天天爽超碰97久久 | 国产精品久久久久9999吃药 | 亚洲精品视 | 最近日本韩国中文字幕 | 国产蜜臀av | 久久国产精品免费观看 | 天天干夜夜爱 | 四虎亚洲精品 | 久久久亚洲成人 | 天堂中文在线视频 | 黄色一级在线免费观看 | 久久久久久毛片精品免费不卡 | 日韩欧美69 | 三级av在线播放 | 成人久久| av免费高清观看 | 欧美日本一区 | 日日夜夜天天综合 | 精品一区二区综合 | 国产精品视频最多的网站 | 色妞色视频一区二区三区四区 | 99精品在线视频观看 | 国产精品女同一区二区三区久久夜 | 特级毛片在线 | 99精品电影 | 国产精品一区二区62 | 99热这里只有精品在线观看 | 久久精品国产v日韩v亚洲 | 99久久日韩精品视频免费在线观看 | 少妇按摩av | 国产精品免费小视频 | 日批视频在线播放 | 中文字幕一区在线观看视频 | а中文在线天堂 | 人人搞人人爽 | 日韩免费视频线观看 | 91tv国产成人福利 | 婷婷色六月天 | 亚洲一区二区精品视频 | aav在线| 亚洲区视频在线 | 日日射av | 国产精品久久久久久久免费大片 | 精品久久免费 | 激情五月av | 亚洲影视九九影院在线观看 | 伊人久久精品久久亚洲一区 | 欧美一级黄大片 | av综合网址| 中文字幕在线观看一区二区 | 国产一级视频在线观看 | 日韩欧美视频一区 | 久久久私人影院 | 91香蕉视频好色先生 | 五月激情电影 | 国产精品免费高清 | 国产精品亚洲a | 人人射av | 狠狠插狠狠操 | 国产资源站 | 免费日韩一区二区三区 | 99在线热播精品免费 | 国产精品夜夜夜一区二区三区尤 | 欧美精品黑人性xxxx | 久久久国产一区二区三区四区小说 | 91精品久久久久久综合乱菊 | 精品久久一区二区三区 | 在线有码中文 | 久草国产在线观看 | 91久久在线观看 | 欧美日韩在线播放 | 国产粉嫩在线观看 | 国产精品一区二区在线观看 | 91精品国产自产在线观看 | 日韩精品不卡在线观看 | 2019中文在线观看 | 国产精品不卡av | 国产专区一 | 亚洲精品乱码久久久久久写真 | 四虎成人精品永久免费av九九 | 日韩av电影中文字幕 | 色在线中文字幕 | 日韩精品欧美一区 | 国产资源在线免费观看 | 欧洲不卡av | 国产精品自在欧美一区 | 欧美色图东方 | 日韩av电影手机在线观看 | 午夜成人免费电影 | 日韩在线网址 | 视频在线亚洲 | 一区二区三区精品在线 | 91麻豆精品国产自产在线 | 精品国产一区二区三区四区在线观看 | 免费观看一级特黄欧美大片 | 日日操日日操 | 激情开心色| 国产精品一区二区久久精品爱微奶 | 国产资源在线观看 | 91精品久久久久久久久 | 91亚·色 | 久久草在线免费 | 久久久久久久久影视 | 国产一级片不卡 | 日韩在线免费视频观看 | 狠狠狠狠狠狠操 | 美女久久久久久久久久久 | 国产高清绿奴videos | 国产亚洲精品女人久久久久久 | 国产午夜精品一区二区三区欧美 | 青草草在线视频 | 欧美日bb| 国产精品三级视频 | 夜夜高潮夜夜爽国产伦精品 | 午夜婷婷网| 日韩欧美在线观看一区 | 久久视频在线 | 欧美一进一出抽搐大尺度视频 | 国产亚洲情侣一区二区无 | 成年人在线播放视频 | 四虎成人精品永久免费av | 久久午夜免费观看 | 成年人免费在线观看网站 | 99在线看| 中文字幕一区在线观看视频 | 欧美在线资源 | 日韩中文在线视频 | 国产精品久久毛片 | 国产精成人品免费观看 | 日日爽天天 | 欧美成人影音 | 国内久久久久 | 中文字幕亚洲高清 | 99精品国产免费久久久久久下载 | 国产精品久久久久一区二区三区共 | 人人爽人人搞 | 中文字幕一区二区三区乱码在线 | 婷婷综合视频 | 国产资源免费在线观看 | 5月丁香婷婷综合 | 国产精品自产拍在线观看 | 天天摸天天操天天爽 | 一区二精品 | 国产黄在线观看 | 日韩欧美精选 | 日韩欧美在线视频一区二区三区 | 99爱这里只有精品 | 99爱视频在线观看 | 日韩在线观看视频网站 | 国产精品美女久久久久久免费 | 国产在线高清 | 亚洲高清网站 | 99国产免费网址 | 亚洲精品五月天 | 久久精品一区二区三区视频 | 成人黄色电影在线播放 | 久久视频在线免费观看 | 99在线观看免费视频精品观看 | 色综合天天综合 | 就要干b | 狠狠干狠狠久久 | 一区二区三区www | 久久综合福利 | 欧美成人黄 | 色97在线| 亚洲精品国产第一综合99久久 | 婷婷六月丁 | 国产亚洲人成网站在线观看 | av免费在线观看1 | 99精品免费久久久久久久久日本 | 九九久久电影 | 天天拍天天操 | 国产精品第2页 | 色姑娘综合天天 | 亚洲第一区精品 | 国产又粗又猛又爽又黄的视频先 | 日韩视频免费 | 亚洲成av人电影 | 2021久久| 精品国产_亚洲人成在线 | 日韩亚洲在线视频 | 免费观看一级 | 婷婷成人亚洲综合国产xv88 | 91色视频| 91精品国自产在线观看欧美 | 日韩xxx视频| 色综合天天干 | 午夜91在线 | 999成人网 | 日韩激情中文字幕 | 丁香婷婷激情网 | 91av在线免费观看 | 一区二区av| 国产美女在线精品免费观看 | 国产又粗又猛又色又黄网站 | 九九亚洲精品 | 超碰国产在线播放 | 在线播放亚洲 | 久久久国产精华液 | 麻豆久久精品 | 丁香5月婷婷久久 | 日韩在线视频播放 | 国产精品亚| 久久久久久久综合色一本 | 久久久久日本精品一区二区三区 | 免费高清在线视频一区· | 天天干天天干天天干天天干天天干天天干 | 天天色综合久久 | 国产精品中文久久久久久久 | 国产很黄很色的视频 | 97视频一区 | 亚洲精选视频在线 | 欧美极品xxx | 日本中文字幕久久 | 久久久福利 | wwxxx日本| 天天添夜夜操 | 久草免费在线 | 人人爱人人爽 | 欧美色图狠狠干 | 97福利在线观看 | 中文字幕字幕中文 | av永久网址 | 日韩毛片在线一区二区毛片 | 成人午夜精品久久久久久久3d | 精品你懂的 | 久久久久伊人 | 美女福利视频在线 | 国产日韩欧美中文 | 国产做aⅴ在线视频播放 | 亚洲精品在线观看中文字幕 | 国产视频亚洲视频 | 国产精品18久久久久久不卡孕妇 | 日韩在线第一 | 安徽妇搡bbbb搡bbbb | 国产精品videoxxxx | 综合久久一本 | 蜜臀精品久久久久久蜜臀 | 国产亚洲激情视频在线 | 在线免费观看av网站 | 国产a高清 | 久久久久久国产精品久久 | 久久五月精品 | 成人午夜剧场在线观看 | 成人午夜片av在线看 | 五月综合激情网 | 夜夜操综合网 | 日韩欧美在线一区 | 久久一级电影 | 激情视频在线高清看 | 西西www4444大胆视频 | 国产亚洲成人网 | 免费成人黄色 | 欧美综合在线视频 | 亚洲在线日韩 | 成人在线免费看 | 久草综合在线观看 | 在线观看视频你懂 | 亚洲精品国久久99热 | 青草视频在线 | 免费看成人av| 中文字幕黄色网址 | 久久精品精品 | 97电院网手机版 | 日本成人黄色片 | 久久久久国产精品免费网站 | 96精品高清视频在线观看软件特色 | 免费麻豆网站 | 97碰碰精品嫩模在线播放 | 黄色成人在线观看 | 色久天 | 国产精品va在线观看入 | 99久热 | 久久蜜臀一区二区三区av | 17婷婷久久www | 午夜资源站 | 亚洲国产精品va在线 | 香蕉视频在线免费 | 国产精彩在线视频 | 夜夜视频资源 | 国产精品一区二区久久国产 | 97人人超碰在线 | 一区二区免费不卡在线 | 亚洲激情在线播放 | 久久久久久国产精品999 | 免费av片在线 | 欧美日韩中文字幕综合视频 | 在线观看国产中文字幕 | 久热香蕉视频 | 狠狠干狠狠操 | 欧美黑人性爽 | 亚洲精品成人免费 | 丁香综合激情 | 狠狠操天天射 | 国产三级视频在线 | 精品久久九九 | 久久精品综合 | 成人免费视频播放 | 91麻豆精品国产91久久久使用方法 | 激情视频网页 | 国产黄色看片 | 在线视频中文字幕一区 | 玖玖视频网 | 天堂av色婷婷一区二区三区 | 激情视频免费在线观看 | 国产精品久久综合 | 亚洲视频2 | 久久影院中文字幕 | 最近中文字幕完整视频高清1 | 国产在线观看一区 | 日韩在线看片 | 久久视频在线观看中文字幕 | 亚洲成人精品在线观看 | 五月婷av | 久久久久久久久久伊人 | 国产精品久久久久久影院 | 中文字幕观看视频 | 最新日韩在线 | 日韩av电影手机在线观看 | 国产黄色精品在线观看 | 久久午夜网| 免费黄色在线 | 国产午夜精品久久久久久久久久 | 日韩大片在线免费观看 | 激情深爱 | 欧美精品久久久久久久久老牛影院 | 天天干天天射天天操 | 亚洲欧洲国产日韩精品 | 青青网视频 | 国产精品12 | 深夜视频久久 | 欧美一级免费黄色片 | 一区二区 不卡 | 国产精品久久久久三级 | 国产精品久久久久久久婷婷 | 亚洲aⅴ免费在线观看 | 国产最新在线视频 | 一级精品视频在线观看宜春院 | 国产成人91 | 成人 亚洲 欧美 | 精品久久久久国产免费第一页 | av在线亚洲天堂 | 日韩精品在线免费观看 | 国产精品精品国产婷婷这里av | 久久在线视频在线 | av网站在线观看播放 | 久久成年人视频 | 国产高清免费在线观看 | 中文字幕不卡在线88 | 精品伦理一区二区三区 | 亚洲综合色视频 | 亚州av网站 | 久久乐九色婷婷综合色狠狠182 | 一级片免费在线 | 人人爽爽人人 | 狠狠操导航 | 日韩三级免费 | 草久久影院 | 色偷偷97| 精品久久久久久久 | 99精品免费久久久久久日本 | 天天干天天操天天入 | 99视频国产精品 | a天堂一码二码专区 | 国产黄色片免费看 | 国产色综合天天综合网 | 欧美国产不卡 | 成人一级视频在线观看 | 国产夫妻性生活自拍 | 欧美日韩三区二区 | 色资源中文字幕 | 国产精品久久网站 | 日韩.com | 成人资源在线播放 | 国产91在线观看 | 久久婷婷国产色一区二区三区 | wwwww.国产 | 欧美成人黄色 | www.色午夜.com | 正在播放 久久 | 99精品视频在线观看免费 | 天天爽天天做 | 91福利专区| 亚洲专区欧美 | 日韩专区一区二区 | 在线成人性视频 | 成人免费视频免费观看 | 精品亚洲视频在线 | 午夜av日韩 | 中文字幕一区二区三区四区在线视频 | 国产一级在线播放 | 韩国av电影在线观看 | a色视频| 国产成人黄色 | 久久久久影视 | 亚洲国产精品视频在线观看 | 天天搞天天干 | 久久久久亚洲国产精品 | 特级西西人体444是什么意思 | 高清国产在线一区 | 午夜国产在线 | 国产区免费 | 日韩免费一级a毛片在线播放一级 | 在线有码中文字幕 | 黄色www | 青青河边草免费视频 | 亚洲精品午夜久久久久久久久久久 | 午夜精品一区二区三区在线视频 | 在线观看色网 | 99热这里只有精品免费 | 久久久精品视频网站 | 狠狠久久综合 | 久久久久久久久久伊人 | 韩国精品福利一区二区三区 | 麻豆传媒视频在线播放 | aa一级片| 精品久久免费看 | 免费三级大片 | 五月开心婷婷 | 麻豆播放| 91黄色在线视频 | 国产最顶级的黄色片在线免费观看 | 在线视频观看91 | 欧美在线视频一区二区 | 久草精品视频在线看网站免费 | 亚洲第一中文字幕 | 成年人免费看片 | 黄色大片日本免费大片 | 免费观看第二部31集 | 一区二区三区电影在线播 | 五月婷婷操 | 九月婷婷人人澡人人添人人爽 | 91麻豆精品国产91久久久久久久久 | 国产午夜一区二区 | 久久亚洲成人网 | 成人综合日日夜夜 | 色噜噜日韩精品欧美一区二区 | 欧美日韩国内在线 | 日韩欧美精品一区 | 日本九九视频 | 国产成人精品一区二区 | 成人黄色大片在线免费观看 | 一区二区三区在线免费播放 | 黄色网址在线播放 | 一本一道久久a久久综合蜜桃 | 成年人在线免费看 | 久久视影| 亚洲国产成人在线 | 色综合久久88色综合天天人守婷 | 婷婷九月激情 | 国产精品精品久久久久久 | 国产麻豆电影 | 亚洲伊人第一页 | 男女精品久久 | 国产资源在线视频 | 激情综合网婷婷 | 综合久久久 | 免费成人av网站 | 国产精品免费观看网站 | 亚洲第一久久久 | 亚洲丝袜一区二区 | 亚洲天堂网在线视频观看 | 天天色综合三 | 午夜在线免费视频 | 中文字幕视频网站 | 免费久久久久久 | 伊人成人激情 | 97视频在线免费 | 成人禁用看黄a在线 | 日日爱av| 免费成人av在线看 | 久久久96| 视频在线在亚洲 | 精品在线亚洲视频 | 午夜精品一二区 | 五月天婷亚洲天综合网精品偷 | 亚洲精品一区二区18漫画 | 欧美色操 | 99精品免费观看 | 久草在线视频首页 | 国产精品99久久久久的智能播放 | 亚洲国产最新 | 国产精品剧情 | 国产黄色片网站 | 亚洲精品视频在线免费播放 | 中文字幕在线视频一区二区三区 | 91大神在线观看视频 | 国产一区二区精品久久 | 日韩,精品电影 | 五月激情丁香 | av片在线观看 | 在线不卡视频 | 91看片黄色 | 欧美国产视频在线 | wwwwww色| 成人午夜av电影 | 国产精品久久精品国产 | 成人av免费在线观看 | 久久综合九色综合久久久精品综合 | 97在线观看视频国产 | 操碰av | 日韩久久久久久久久久久久 | 亚洲成av人片在线观看香蕉 | 99爱在线 | av黄色免费在线观看 | 久久一区二区三区日韩 | 久久综合狠狠综合久久狠狠色综合 | 人人草人人做 | zzijzzij亚洲成熟少妇 | 不卡日韩av | 亚洲成人午夜在线 | 一区二区三区精品久久久 | 在线视频 91 | 亚洲最快最全在线视频 | 亚洲 精品在线视频 | 日韩电影在线一区二区 | 一级黄色片在线播放 | 在线观看a视频 | 五月综合色 | 亚洲激情在线 | 国产中文字幕三区 | 免费h漫在线观看 | 在线视频你懂得 | 中文字幕精品一区二区精品 | 视频1区2区| 成人蜜桃视频 | 中文字幕一区2区3区 | 国产精品18久久久久久vr | 黄色大片免费网站 | 91在线播放视频 | 国产精品第二页 | 久二影院 | www.玖玖玖 | 精品在线观看视频 | 欧美国产日韩一区 | 一区国产精品 | 欧美另类交人妖 | 日韩高清 一区 | 亚洲第一av在线 | 日日干夜夜草 | 国产黄色精品 | 欧亚日韩精品一区二区在线 | 国产精品久久久久久久久久久免费 | 九九热免费在线视频 | 特级毛片aaa| 欧美国产日韩一区二区三区 | 超碰97国产 | 午夜精品久久久久99热app | 国产黄色精品在线 | 国产伦理久久精品久久久久_ | 啪嗒啪嗒免费观看完整版 | 狠狠伊人 | 丁香五月网久久综合 | 97超碰免费在线观看 | 国产精品视频久久久 | 欧美另类激情 | 欧美老少交 | 麻豆视频在线 | 99久久久久成人国产免费 | 久久成人综合 | 国产一级在线免费观看 | 激情亚洲综合在线 | 最新av免费在线 | 精品久久久久一区二区国产 | 亚洲天堂网站视频 | 天天射,天天干 | 在线天堂中文www视软件 |