You are on page 1of 18

private void Form1_Load(object sender, EventArgs e) {.

} private void OpenDir() //thm 20/11 {} TcpClient _connection ; DirectoryInfo curDir; TreeNode root = new TreeNode("/", 11, 11); Timer time = new Timer(); int _counttime = 0, second = 0, minute=0; string _Hostname; string _pathtreeview="/"; string[] _namefolder; int _countfolder=0; int _Port; string _Username; string _Passaword; bool _login = true; public Form1() { InitializeComponent(); this.time.Tick += new EventHandler(time_Tick); } ///////// tool private void ButtonLogview_MouseMove(object sender, MouseEventArgs e) { toolStripStatusLabel1.Text = "Toggles the display of the message log"; } private void ButtonLogview_MouseLeave(object sender, EventArgs e) { toolStripStatusLabel1.Text = ""; } private void ButtonLocalTree_MouseMove(object sender, MouseEventArgs e) { toolStripStatusLabel1.Text= "Toggles the display of the local directory tree"; } private void ButtonLocalTree_MouseLeave(object sender, EventArgs e) { toolStripStatusLabel1.Text = ""; } private void ButtonRemoteTree_MouseMove(object sender, MouseEventArgs e) { toolStripStatusLabel1.Text="Toggles the display of the remote directory tree"; } private void ButtonRemoteTree_MouseLeave(object sender, EventArgs e) { toolStripStatusLabel1.Text = ""; } private void ButtonQueue_MouseMove(object sender, MouseEventArgs e) { toolStripStatusLabel1.Text = "Toggles the display of the transfer queue"; }

private void ButtonQueue_MouseLeave(object sender, EventArgs e) { toolStripStatusLabel1.Text = ""; } private void ButtonLogview_Click(object sender, EventArgs e) { if (tlStripBtLogview.Checked == false) { tlStripBtLogview.Checked = true; ltBstatusconnect.Visible = true; splitterlogview.Visible = true; } else { tlStripBtLogview.Checked = false; ltBstatusconnect.Visible = false; splitterlogview.Visible = false; } } private void ButtonLocalTree_Click(object sender, EventArgs e) { if (tlStripBtLCtreeview.Checked == false) { tlStripBtLCtreeview.Checked = true; treeViewLocal.Visible = true; splittertreelocal.Visible = true; } else { tlStripBtLCtreeview.Checked = false; treeViewLocal.Visible = false; splittertreelocal.Visible = false; } } private void ButtonRemoteTree_Click(object sender, EventArgs e) { if (tlStripBtSevertree.Checked == false) { tlStripBtSevertree.Checked = true; treeViewSever.Visible = true; splittertreesever.Visible = true; } else { tlStripBtSevertree.Checked = false; treeViewSever.Visible = false; splittertreesever.Visible = false; } }

private void ButtonQueue_Click(object sender, EventArgs e) { if (tlStripBtQueueview.Checked == false) { tlStripBtQueueview.Checked = true; tabControl1.Visible = true; splitterqueue.Visible = true; } else { tlStripBtQueueview.Checked = false; splitterqueue.Visible = false; tabControl1.Visible = false; } } ///////////end toolbar private void tStripBtConnect_Click(object sender, EventArgs e) { Connection(); } string statuslog(Stream s) { char[] _char = new char[1024*10]; int _count = 0; StreamReader _str = new StreamReader(s); StringBuilder buff = new StringBuilder(); try { _count = _str.Read(_char, 0, 1024); } catch (Exception e) { MessageBox.Show(e.ToString()); } string _lresponse=""; for (int i = 0; i < _count; i++) { buff.Append(_char[i].ToString()); if (_char[i] == '\n') { lresponse = buff.ToString(); ltBstatusconnect.Items.Add("Response"+" buff = new StringBuilder(); } } return _lresponse;

"+buff.ToString());

} void time_Tick(object o, EventArgs e) { _counttime++; second =_counttime % 60; minute = (_counttime / 60) % 60; if (minute == 2&& second==0) { ltBstatusconnect.Items.Add("Error:" +" "+ "Connection closed by sever"); } }

void Connection() { string _lresponse; NetworkStream _response; treeViewSever.Nodes.Clear(); ltViewSever.Items.Clear(); ArrayList _Lfile = new ArrayList(); _Hostname = tStripTxtBHost.Text; _connection = new TcpClient(); _Port = 21; _Username = tStripTxtBUser.Text; _Passaword = tStripTxtBPass.Text; _connection.Connect(_Hostname, _Port); _response = _connection.GetStream(); _lresponse= statuslog(_response); if (_lresponse.Substring(0, 3) == "220") { time.Start(); _lresponse = Ftpcommand("USER " + _Username); if (_lresponse.Substring(0, 3) == "331") { _lresponse = Ftpcommand("PASS " + _Passaword); if (_lresponse.Substring(0, 3) != "230") { ltBstatusconnect.Items.Add("Error" +" "+ "Failed login"); } else { Ftpcommand("SYST"); Ftpcommand("FEAT"); Ftpcommand("PWD"); Ftpcommand("TYPE I"); getRemoteFolders(); for (int i = 0; i < _countfolder; i++) { TreeNode htdocs = new TreeNode(_namefolder[i], 11, 11); root.Nodes.Add(htdocs); } treeViewSever.Nodes.Add(root); } } else ltBstatusconnect.Items.Add("Error" + " } else { ltBstatusconnect.Items.Add("Error connection"); ltBstatusconnect.Items.Add("Re-connection"); // Connection(); } }

" + "Failed login");

public string Ftpcommand(string cmd) { _counttime = 0; second = 0; minute = 0; string _lresponse; byte[] _bytes = Encoding.Default.GetBytes(cmd + "\r\n"); ltBstatusconnect.Items.Add("Command" + " " + cmd); _connection.GetStream().Write(_bytes, 0, _bytes.Length); _lresponse = statuslog(_connection.GetStream()); return _lresponse; }

void reconnection() { string _lresponse; NetworkStream _response; _connection.Close(); _connection = new TcpClient(); _connection.Connect(_Hostname, _Port); _response = _connection.GetStream(); _lresponse = statuslog(_response); if (_lresponse.Substring(0, 3) == "220") { time.Start(); _lresponse = Ftpcommand("USER " + _Username); if (_lresponse.Substring(0, 3) == "331") { _login = true; _lresponse = Ftpcommand("PASS " + _Passaword); if (_lresponse.Substring(0, 3) != "230") { ltBstatusconnect.Items.Add("Error"+" "+"Failed login"); _login = false; } else _login = true; } else { ltBstatusconnect.Items.Add("Error"+" _login = false; } } }

" + "Failed login");

public byte[] sendPassiveFTPcmd(string cmd) { byte[] szData; NetworkStream _response; _response = _connection.GetStream(); System.Collections.ArrayList al = new ArrayList(); byte[] RecvBytes = new byte[Byte.MaxValue]; Int32 bytes; Int32 totalLength = 0; szData =Encoding.ASCII.GetBytes(cmd.ToCharArray()); Stream passiveConnection; passiveConnection = createPassiveConnection(); _response.Write(szData, 0, szData.Length); StreamReader _str = new StreamReader(_response); char[] _char = new char[1024 * 10]; int _count = 0; _count = _str.Read(_char, 0, 1024); while (_count > 0) { _count = _count - _str.ReadLine().Length; } while (true) { bytes = passiveConnection.Read(RecvBytes, 0, RecvBytes.Length); if (bytes <= 0) break; totalLength += bytes; al.AddRange(RecvBytes); } al = al.GetRange(0, totalLength); return (byte[])al.ToArray((new byte()).GetType()); } public Stream createPassiveConnection() { string[] commaSeperatedValues; int highByte = 0; int lowByte = 0; int passivePort = 0; string response = ""; TcpClient clientSocket=new TcpClient(); Stream pasvStrm = null; response = Ftpcommand("PASV"); commaSeperatedValues = response.Split(",".ToCharArray()); highByte = Convert.ToInt16(commaSeperatedValues[4]) * 256; commaSeperatedValues[5] = commaSeperatedValues[5].Substring(0, commaSeperatedValues[5].IndexOf(")")); lowByte = Convert.ToInt16(commaSeperatedValues[5]); passivePort = lowByte + highByte; clientSocket = new TcpClient(_Hostname, passivePort); pasvStrm = clientSocket.GetStream(); return pasvStrm; }

public void getRemoteFolders() { string[] filesAndFolders; string fileOrFolder; // FileInfo file; string[] infofile = new string[6]; _namefolder = new string[4096]; _countfolder = 0; string folderList = ""; int lastSpace = 0; ltViewSever.Items.Clear(); folderList =Encoding.ASCII.GetString(sendPassiveFTPcmd("LIST\r\n")); filesAndFolders = folderList.Split("\n".ToCharArray()); for (int i = 0; i < filesAndFolders.GetUpperBound(0); i++) { if (filesAndFolders[i].StartsWith("-") || filesAndFolders[i].StartsWith("d")) { lastSpace = 56; if (filesAndFolders[i].Length > 56) { if (filesAndFolders[i].StartsWith("-")) { int j; fileOrFolder = filesAndFolders[i].Substring(lastSpace); infofile[0] = fileOrFolder; infofile[1] = filesAndFolders[i].Substring(33, 10); if ((j = filesAndFolders[i].LastIndexOf(".")) != -1) {
infofile[2] = filesAndFolders[i].Substring(j + 1, filesAndFolders[i].Length-j-1).ToUpper();

} else {
infofile[2] = "File";

}
infofile[3] = filesAndFolders[i].Substring(43, 13); infofile[4] = filesAndFolders[i].Substring(0, 10); infofile[5] = filesAndFolders[i].Substring(16, 17); ListViewItem lvItem = new ListViewItem(infofile, 0);

switch (infofile[2].Trim('\r')) { case "TXT": lvItem.ImageIndex = 0; break; case "PNG": lvItem.ImageIndex = 1; break; case "BMG": lvItem.ImageIndex = 2; break; case "EXE": lvItem.ImageIndex = 3; break; case "GIF": lvItem.ImageIndex = 4; break; case "JGP": lvItem.ImageIndex = 5; break; case "DOC": case "DOCX": lvItem.ImageIndex = 7; break; case "XLS": case "XLSX": lvItem.ImageIndex = 8; break; case "PDF": lvItem.ImageIndex = 10; break; case "JPEG": lvItem.ImageIndex = 12; break; case "DLL": case "DB": lvItem.ImageIndex = 13; break;

case "ZIP": case "RAR": lvItem.ImageIndex = 15; break; case "HTML": case "HTM": case "PHP": case "XAML": case "XML": lvItem.ImageIndex = 16; break; case "CSS": lvItem.ImageIndex = 17; break; default: lvItem.ImageIndex = 14; break; } ltViewSever.Items.Add(lvItem); } else {
if (filesAndFolders[i].Substring(lastSpace) == ".\r")

{ } else {
fileOrFolder = filesAndFolders[i].Substring(lastSpace); if (filesAndFolders[i].Substring(lastSpace) == "..\r")

{ } else { _namefolder[_countfolder] = fileOrFolder; _countfolder++; }


infofile[0] infofile[1] infofile[2] infofile[3] infofile[4] infofile[5] = = = = = = fileOrFolder; " "; "File folder"; filesAndFolders[i].Substring(43, 13); filesAndFolders[i].Substring(0, 10); filesAndFolders[i].Substring(16, 17);

ListViewItem lvItem = new ListViewItem(infofile, 11);

ltViewSever.Items.Add(lvItem); } } } } } }

private void treeViewSever_AfterSelect(object sender, TreeViewEventArgs e) { _countfolder = 0; _namefolder = new string[4096];

if (e.Node.FullPath != "/" ) { string _path = e.Node.FullPath.Remove(1, 1).Replace('\\', ' '); string[] _char; _path = _path.Replace('\r', '/'); int i = _path.LastIndexOf('/'); _path = _path.Remove(i, 1); _char = _path.Split(' '); StringBuilder buff = new StringBuilder(); foreach (string s in _char) { buff.Append(s); } if (2 <= minute) { reconnection(); if (_login) { Ftpcommand("CWD " + buff.ToString()); _pathtreeview = buff.ToString(); } } else { Ftpcommand("CWD " + buff.ToString()); _pathtreeview = buff.ToString(); } } else { if (2 <=minute) { reconnection(); if (_login) { _pathtreeview = e.Node.FullPath; Ftpcommand("CWD " + e.Node.FullPath); } } else { _pathtreeview = e.Node.FullPath; Ftpcommand("CWD " + e.Node.FullPath); } } if (_login) { Ftpcommand("PWD"); Ftpcommand("TYPE I"); getRemoteFolders(); tlStripCmBSever.Text = _pathtreeview; TreeNode _checknode = e.Node.FirstNode; StringBuilder buffer = new StringBuilder(); string[] _textnode; int _flag = 0; if (_checknode != null) { while (_checknode != null)

{ buffer.Append(_checknode.Text); buffer.Append(","); _checknode = _checknode.NextNode; } _textnode = buffer.ToString().Split(','); for (int i = 0; i < _countfolder; i++) { _flag = 0; foreach (string s in _textnode) { if (s == _namefolder[i]) _flag = 1; } if (_flag == 0) {
TreeNode _Nodefolder = new TreeNode(_namefolder[i], 11, 11); e.Node.Nodes.Add(_Nodefolder);

} } } else { for (int i = 0; i < _countfolder; i++) {


TreeNode _Nodefolder = new TreeNode(_namefolder[i], 11, 11); e.Node.Nodes.Add(_Nodefolder);

} } } } private void ltViewSever_MouseDoubleClick(object sender, MouseEventArgs e) { ListViewItem Items = ltViewSever.FocusedItem; StringBuilder buff = new StringBuilder(); TreeNode _nodevisible=root.FirstNode; string[] _pathtam; string _stringtam="/"; int lenght = 0,flag=0;
if (Items.SubItems[0].Text != "..\r" && Items.SubItems[2].Text == "File folder")

{ if (2 <= minute) { reconnection(); if (_login) { Ftpcommand("CWD " + _pathtreeview); foreach (string s in Items.SubItems[0].Text.Split('\r')) { buff.Append(s); } Ftpcommand("CWD " + buff.ToString()); if (_pathtreeview == "/") { _pathtreeview = _pathtreeview + buff.ToString();

} else { _pathtreeview = _pathtreeview + "/" + buff.ToString(); } _stringtam = _pathtreeview; } } else { foreach (string s in Items.SubItems[0].Text.Split('\r')) { buff.Append(s); } Ftpcommand("CWD " + buff.ToString()); if (_pathtreeview == "/") { _pathtreeview = _pathtreeview + buff.ToString(); } else { _pathtreeview = _pathtreeview + "/" + buff.ToString(); } _stringtam= _pathtreeview; } if (_login) { Ftpcommand("PWD"); Ftpcommand("TYPE I"); getRemoteFolders(); tlStripCmBSever.Text = _pathtreeview; _pathtam = _stringtam.Split('/'); foreach (string s in _pathtam) { string a = ""; StringBuilder buffer = new StringBuilder(); if (s != "") { if (_nodevisible != null) {

while (true) { buffer = new StringBuilder(); a = _nodevisible.Text; foreach (string l in a.Split('\r')) { buffer.Append(l); break; } if (buffer.ToString() == s) { if (s == buff.ToString()) {

break; } _nodevisible = _nodevisible.FirstNode; break; } if (_nodevisible != null) { _nodevisible = _nodevisible.NextNode; } } } } } TreeNode _checknode = _nodevisible.FirstNode; StringBuilder _buffer = new StringBuilder(); string[] _textnode; int _flag = 0; if (_checknode != null) { while (_checknode != null) { _buffer.Append(_checknode.Text); _buffer.Append(","); _checknode = _checknode.NextNode; } _textnode = _buffer.ToString().Split(','); for (int i = 0; i < _countfolder; i++) { _flag = 0; foreach (string s in _textnode) { if (s == _namefolder[i]) _flag = 1; } if (_flag == 0) {
TreeNode _Nodefolder = new TreeNode(_namefolder[i],11,11); _nodevisible.Nodes.Add(_Nodefolder);

} } } else { for (int i = 0; i < _countfolder; i++) {


TreeNode _Nodefolder = new TreeNode(_namefolder[i],11, 11);

_nodevisible.Nodes.Add(_Nodefolder); } } } } else { if (2 <= minute) {

reconnection(); if (_login) { if (_pathtreeview != "/") {


flag = 1; lenght = _pathtreeview.LastIndexOf('/'); _pathtreeview = _pathtreeview.Remove(lenght, _pathtreeview.Length - lenght); Ftpcommand("CWD " + _pathtreeview);

} } } else { if (_pathtreeview != "/") {


flag = 1; lenght = _pathtreeview.LastIndexOf('/'); _pathtreeview = _pathtreeview.Remove(lenght, _pathtreeview.Length - lenght); Ftpcommand("CWD " + _pathtreeview);

} } if (_login) { if (flag == 1) { Ftpcommand("PWD"); Ftpcommand("TYPE I"); getRemoteFolders(); tlStripCmBSever.Text = _pathtreeview; } } } } private void tlStripCmBSever_KeyDown(object sender, KeyEventArgs e) { _namefolder = new string[4096]; _countfolder = 0; string _lresponse; if (e.KeyValue == 13) { if (2 <= minute) { reconnection(); if (_login) { _lresponse = Ftpcommand("CWD "+tlStripCmBSever.Text); if (_lresponse.Substring(0, 3) != "250") {
ltBstatusconnect.Items.Add("Command" + " "+"Failed to retrieve directory listing");

} else { Ftpcommand("PWD"); Ftpcommand("TYPE I"); getRemoteFolders(); if (tlStripCmBSever.Text != "/")

{ string _pathtam = tlStripCmBSever.Text; _pathtam = _pathtam.Remove(_pathtam.IndexOf('/'),1); string[] _strpath = _pathtam.Split('/'); TreeNode _Node = root.FirstNode; StringBuilder buff = new StringBuilder(); TreeNode _newnode; int i = 1; if (_Node != null) { foreach (string s in _strpath) { if (i == 1) { i = checknode(s, _Node); if (i == 0) { _newnode=new TreeNode(s+"\r",11,11); _Node = _Node.Parent; _Node.Nodes.Add(_newnode); _Node = _Node.FirstNode; } else { while (_Node != null) { buff = new StringBuilder();
foreach (string l in _Node.Text.Split('\r'))

{ buff.Append(l); break; } if (buff.ToString() == s) { if(_Node.FirstNode != null) { _Node = _Node.FirstNode; } break; } else { _Node = _Node.NextNode; } } } } else { _newnode = new TreeNode(s+"\r", 11, 11); _Node.Nodes.Add(_newnode); _Node = _Node.FirstNode; } } } TreeNode _checknode = _Node; StringBuilder _buffer = new StringBuilder(); string[] _textnode;

int _flag = 0; if (_checknode != null) { while (_checknode != null) { _buffer.Append(_checknode.Text); _buffer.Append(","); _checknode = _checknode.NextNode; } _textnode = _buffer.ToString().Split(','); for (int j = 0; j < _countfolder; j++) { _flag = 0; foreach (string s in _textnode) { if (s == _namefolder[j]) _flag = 1; } if (_flag == 0) {
TreeNode _Nodefolder = new TreeNode(_namefolder[j], 11, 11); _Node.Nodes.Add(_Nodefolder);

} } } else { for (int j = 0; j < _countfolder; j++) {


TreeNode _Nodefolder = new TreeNode(_namefolder[j], 11, 11); _Node.Nodes.Add(_Nodefolder);

} } } } } } else { _lresponse = Ftpcommand("CWD "+tlStripCmBSever.Text); if (_lresponse.Substring(0, 3) != "250") {


ltBstatusconnect.Items.Add("Command" + " "+"Failed to retrieve directory listing");

} else { Ftpcommand("PWD"); Ftpcommand("TYPE I"); getRemoteFolders(); if (tlStripCmBSever.Text != "/") { string _pathtam = tlStripCmBSever.Text; _pathtam = _pathtam.Remove(_pathtam.IndexOf('/'), 1); string[] _strpath = _pathtam.Split('/'); TreeNode _Node = root.FirstNode; TreeNode _findNode = _Node; StringBuilder buff = new StringBuilder(); TreeNode _newnode; int i = 1;

if (_Node != null) { foreach (string s in _strpath) { if (i == 1) { i = checknode(s, _Node); if (i == 0) {


_newnode = new TreeNode(s+"\r", 11, 11); _findNode.Nodes.Add(_newnode); _findNode = _newnode;

} else { while (_Node != null) {


buff = new StringBuilder(); foreach (string l in _Node.Text.Split('\r'))

{ buff.Append(l); break; } if (buff.ToString() == s) { _findNode = _Node; if (_Node.FirstNode != null) { _Node = _Node.FirstNode; } break; } else { _Node = _Node.NextNode; } } } } else { _newnode = new TreeNode(s+"\r", 11, 11); _findNode.Nodes.Add(_newnode); _findNode = _findNode.FirstNode; } } } else { foreach (string s in _strpath) { _newnode = new TreeNode(s, 11, 11); _findNode.Nodes.Add(_newnode); _findNode = _Node.FirstNode; } } TreeNode _checknode = _findNode.FirstNode; StringBuilder _buffer = new StringBuilder();

string[] _textnode; int _flag = 0; if (_checknode != null) { while (_checknode != null) { _buffer.Append(_checknode.Text); _buffer.Append(","); _checknode = _checknode.NextNode; } _textnode = _buffer.ToString().Split(','); for (int j = 0; j < _countfolder; j++) { _flag = 0; foreach (string s in _textnode) { if (s == _namefolder[j]) _flag = 1; } if (_flag == 0) {
TreeNode _Nodefolder=new TreeNode(_namefolder[j],11,11); _findNode.Nodes.Add(_Nodefolder);

} } } else { for (int j = 0; j < _countfolder; j++) {


TreeNode _Nodefolder = new TreeNode(_namefolder[j], 11, 11); _findNode.Nodes.Add(_Nodefolder);

} } } } } } } int checknode(string s, TreeNode Node) { int i = 0; StringBuilder buff = new StringBuilder(); string[] _str; while (Node != null) { buff.Append(Node.Text); Node = Node.NextNode; } _str = buff.ToString().Split('\r'); foreach (string l in _str) { if (l == s) return 1; } return i; } private void OpenDir() {.} private void Form1_Load(object sender, EventArgs e) {} private void tlStripCmBLocal_SelectedIndexChanged(object sender, EventArgs e)

private private private private private private } }

void void void void void void

listViewLocal_ItemActivate(object sender, EventArgs e) listViewLocal_MouseClick(object sender, MouseEventArgs e) contextMenuStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs treeViewLocal_BeforeExpand(object sender, TreeViewCancelEventArgs e) treeViewLocal_BeforeSelect(object sender, TreeViewCancelEventArgs e) treeViewLocal_BeforeCollapse(object sender, TreeViewCancelEventArgs e)

You might also like