⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 explorerdlg.cs

📁 用C#写的FTP客户端
💻 CS
📖 第 1 页 / 共 3 页
字号:
			}
		}

		protected void OnClickDisconnect (object sender, System.EventArgs e)
		{
			if ( m_bConnectedFlag == true ) {
				this.Cursor = Cursors.WaitCursor;
				if (m_FTPClient.Disconnect() == 0) {
					this.Cursor = Cursors.Arrow;
					MessageBox.Show(m_FTPClient.GetLastError(),"FTP Explorer - Error",MessageBox.IconStop);
					return;
				}
				m_tvFolderView.Nodes.Clear();
				m_lvFileView.Clear();
				ToggleMenuItems(0);
				this.Cursor = Cursors.Arrow;
				m_bConnectedFlag = false;

				/*	Enable all MRU list */
				EnableMRUList(true);
			}
			InitControls();
		}

		private void EnableMRUList(bool l_bFlag){
			if ( m_iMRUCount == 1  ) {
				m_menuMRU1.Enabled = l_bFlag;
			}
			else if ( m_iMRUCount == 2  ) {
				m_menuMRU1.Enabled = l_bFlag;
				m_menuMRU2.Enabled = l_bFlag;
			}
			else if ( m_iMRUCount == 3  ) {
				m_menuMRU1.Enabled = l_bFlag;
				m_menuMRU2.Enabled = l_bFlag;
				m_menuMRU3.Enabled = l_bFlag;
			}
			else if ( m_iMRUCount == 4  ) {
				m_menuMRU1.Enabled = l_bFlag;
				m_menuMRU2.Enabled = l_bFlag;
				m_menuMRU3.Enabled = l_bFlag;
				m_menuMRU4.Enabled = l_bFlag;
			}
		}

		/*	Connects to FTP Server */
		protected void OnClickConnect (object sender, System.EventArgs e)
		{
			ConnectDlg dlg = new ConnectDlg(m_strFTPAddress,m_strFTPUser,"");
			dlg.ShowDialog();
			if ( dlg.m_iDataFlag == 1 ) {
				/*	If OK is pressed then connect to FTP server */
				this.Cursor = Cursors.WaitCursor;
				m_strFTPAddress = dlg.m_strFTPServer;
				m_strFTPUser = dlg.m_strFTPUserID;
				m_strFTPPassword = dlg.m_strFTPPassword;
				m_labelTreeView.Text = "No Folders to display";
				m_labelTreeView.Refresh();
				statusBarPanel1.Text = "Connecting to " + m_strFTPAddress + ". Please wait...";
				m_statusBar.Refresh();
				int l_iRetval = m_FTPClient.Connect(m_strFTPAddress,m_strFTPUser,m_strFTPPassword);
				if ( l_iRetval == 0 ){
					string l_strError = m_FTPClient.GetLastError();
					this.Cursor = Cursors.Arrow;
					MessageBox.Show(l_strError,"FTP Explorer - Error",MessageBox.IconStop);
					m_bConnectedFlag = false;
					ToggleMenuItems(0);
					m_labelTreeView.Text = "Not connected";
					m_labelListView.Text = "";
					statusBarPanel1.Text = "";
					statusBarPanel2.Text = "";
					return ;
				}
				m_bConnectedFlag = true;
				ToggleMenuItems(1);
				statusBarPanel1.Text = "Connected to " + m_strFTPAddress;
				m_statusBar.Refresh();

				RefreshFolderView("ROOT","",m_tnRootNode);
				string l_strFile = m_FTPClient.m_strList;

				m_FTPClient.m_strList = "";
				this.Cursor = Cursors.Arrow;

				/*	Add to MRU List */
				AddToMRUList(m_strFTPAddress,m_strFTPUser);

				/*	Disable MRU List */
				EnableMRUList(false);
			}
			return;
		}

		/*	Add the current menu item to Most Recent Used List */
		private void AddToMRUList(string l_strFTPServer,string l_strFTPUser){

			/*	If the element is already existing 
			 *	do not add to the list
			 * */
			foreach(object obj in m_arrMRUConn ) {
				MRUConnections l_conn = (MRUConnections) obj;
				if (l_conn.FTPServer.Equals(l_strFTPServer) && l_conn.FTPUser.Equals(l_strFTPUser) ) {
					/*	do not add and skip the rest */
					return;
				}
			}

			if ( m_iMRUCount <= 3 ) {
				m_arrMRUConn[m_iMRUCount].FTPServer = l_strFTPServer;
				m_arrMRUConn[m_iMRUCount].FTPUser = l_strFTPUser;
				if ( m_iMRUCount == 0 ) {
					m_menuMRU1.Text = l_strFTPServer + "," + l_strFTPUser; 
					m_menuMRU1.Visible = true;
					m_menuMRU1.Enabled = false;
				}
				if ( m_iMRUCount == 1 ) {
					m_menuMRU2.Text = l_strFTPServer + "," + l_strFTPUser; 
					m_menuMRU2.Visible = true;
					m_menuMRU2.Enabled = false;
				}
				if ( m_iMRUCount == 2 ) {
					m_menuMRU3.Text = l_strFTPServer + "," + l_strFTPUser; 
					m_menuMRU3.Visible = true;
					m_menuMRU3.Enabled = false;
				}
				if ( m_iMRUCount == 3 ) {
					m_menuMRU4.Text = l_strFTPServer + "," + l_strFTPUser; 
					m_menuMRU4.Visible = true;
					m_menuMRU4.Enabled = false;
				}

				m_menuMRUSep.Visible = true;
				m_iMRUCount++;
				/*	Reset back to 0, so that the next item can be added */
				if ( m_iMRUCount == 4 ) {
					m_iMRUCount = 0;
				}
			}
			return;
		}

		/*	Calls LIST command and Populates Treeview and Listview control */
		private int RefreshFolderView(string l_strFullPath,string l_strCurDir,TreeNode l_tnCurNode){
			statusBarPanel2.Text = "Retreiving Folders and Files. Please wait...";
			m_statusBar.Refresh();

			string l_strTemp = "";
			
			/*	If ROOT is passed then get the Root directory */
			if ( l_strFullPath.Equals("ROOT" ) ) {
				l_strTemp = m_FTPClient.GetRootDirectory();
			}
			else {
				l_strTemp = l_strFullPath;
			}

			/*	Change to corresponding directory */
			int l_iRetval = m_FTPClient.ChangeWorkingDirectory(l_strTemp);
			if (l_iRetval == 0 ) {
				statusBarPanel1.Text = "Connected to " + m_strFTPAddress;
				statusBarPanel2.Text =  "No files or directory found";
				string l_strErr = m_FTPClient.GetLastError();
				MessageBox.Show(l_strErr,"FTP Explorer",MessageBox.IconError);
				return l_iRetval;
			}

			/*	Get the file list in the current directory */
			int l_iFileCount = m_FTPClient.GetList();
			if (l_iFileCount == 0 ) {
				string l_strError = "No files or directory found or Connection lost. Please try again.";
				statusBarPanel1.Text = "Connected to " + m_strFTPAddress;
				statusBarPanel2.Text =  "No files or directory found";
				MessageBox.Show(l_strError,"FTP Explorer",MessageBox.IconError);
				return l_iRetval;
			}

			statusBarPanel2.Text = "Refresing Folder and File views with data";
			FileList l_FileListObj = m_FTPClient.GetFileList();

			/*	Populate TreeView Control */
			PopulateTreeListView(l_FileListObj,l_strFullPath,l_tnCurNode);
			if ( l_strFullPath.Equals("ROOT") ) {
				statusBarPanel3.Text = m_FTPClient.GetCurrentWorkingDirectory();
			}
			else {
				statusBarPanel3.Text = l_strFullPath;
			}
			
			m_labelTreeView.Text = l_strTemp;		/*	Display current directory */
			statusBarPanel3.Text = m_strLocalDirectory;
			statusBarPanel1.Text = "Connected to " + m_strFTPAddress;
			statusBarPanel2.Text = "Logged in as " + m_strFTPUser ;
			return 1;
		}

		/*
		 *	Function that populates Folder and File views
		*/
		private void PopulateTreeListView(FileList l_FileListObj,string l_strRootFlag,TreeNode l_tnNode){
			TreeNode l_tnCurrNode ;
			InitListControl();
			long l_lTotalSize = 0;
			m_lvFileView.Refresh();
			if ( l_strRootFlag.Equals("ROOT" ) ) {
				m_tvFolderView.Nodes.Clear();
				m_tnRootNode = new TreeNode(m_FTPClient.GetRootDirectory(),0,0);
				m_tvFolderView.Nodes.Add(m_tnRootNode);
				l_tnCurrNode = m_tnRootNode;
			}
			else {
				l_tnCurrNode = l_tnNode;
			}

			TreeNodeCollection l_tcFolderCollection = l_tnCurrNode.Nodes;
			FileInfo l_FileInfo = null; 
			int l_iNoOfFiles = l_FileListObj.GetCount();
			int l_iCount = 0;
			
			string l_strFileName = "",l_strDateCreated = "",l_strTimeCreated = "";
			string l_strFilePath = "",l_strFileOwner = "",l_strFileGroup = "";
			int l_iFileType = 0,l_iFileSize = 0;
			string[] l_strsubItems = new string[3];
			int l_iTreeIndex = 0,l_iListIndex = 0;

			for ( ; l_iCount < l_iNoOfFiles ; l_iCount++ ) {
				l_FileInfo = l_FileListObj.GetFileInfo(l_iCount);
				if (l_FileInfo != null ) {
					l_FileInfo.GetFileInfo(out l_iFileType,out l_strFileName,out l_strFilePath,out l_strDateCreated,out l_iFileSize,out l_strFileOwner,out l_strFileGroup,out l_strTimeCreated);
					if ( l_iFileType == 2 ) {
						if ( l_strFileName.Equals(".") || l_strFileName.Equals("..") ) {
							/*	If current or parent directory, then do not add to treeview 
							 *	and skip to next record
							 */
							continue;
						}
						/*	If folder then add to tree view */
						TreeNode l_tnFolderNode = new TreeNode(l_strFileName,1,2);
						l_tcFolderCollection.Add(l_iTreeIndex,l_tnFolderNode);
						l_iTreeIndex++;
					}
					else {
						/*	Add to List view */
						l_lTotalSize += l_iFileSize;
						l_strsubItems[0] = l_iFileSize.ToString();
						l_strsubItems[1] = l_strDateCreated;
						switch ( m_FTPClient.GetServerOS()) {
							case 0 :	/*	If unknown	*/
								l_strsubItems[2] = l_strFileOwner;
								break;
							case 1 :	/*	If Unix	*/
								l_strsubItems[2] = l_strFileOwner;
								break;
							case 2 :	/*	If Windows */
								l_strsubItems[2] = l_strTimeCreated;
								break;
							default :
								l_strsubItems[2] = l_strFileOwner;
								break;
						}
						ListItem l_liFileData = new ListItem(l_strFileName,0,l_strsubItems);
						m_lvFileView.InsertItem(l_iListIndex,l_liFileData);
						l_iListIndex++;
					}
				}
			}

			string l_strStatusMessage = "";
			l_strStatusMessage = "Folder(s) : " + l_iTreeIndex + ", File(s) : " + l_iListIndex + ", Total Size : " + l_lTotalSize.ToString();
			m_labelListView.Text = l_strStatusMessage;
			return;
		}
		
		private void InitListControl(){
			m_lvFileView.Clear();
			m_lvFileView.InsertColumn(0,"Name",150,HorizontalAlignment.Left );
			m_lvFileView.InsertColumn(1,"Size",70,HorizontalAlignment.Right );
			m_lvFileView.InsertColumn(2,"Created",100,HorizontalAlignment.Left );
			switch ( m_FTPClient.GetServerOS()) {
				case 0 :	/*	If unknown	*/
					m_lvFileView.InsertColumn(3,"Owner",100,HorizontalAlignment.Left );
					break;
				case 1 :	/*	If unix	*/
					m_lvFileView.InsertColumn(3,"Owner",100,HorizontalAlignment.Left );
					break;
				case 2 :	/*	If Windows	*/
					m_lvFileView.InsertColumn(3,"Time",100,HorizontalAlignment.Left );
					break;
				default :
					m_lvFileView.InsertColumn(3,"Owner",100,HorizontalAlignment.Left );
					break;
			}
			return ;
		}

		private void ToggleMenuItems(int l_iConnFlag){
			/*	If connected */
			if ( l_iConnFlag == 1 ) {
				menuItem2.Enabled = false;
				menuItem3.Enabled = true;
				menuItem5.Enabled = true;
				menuItem11.Enabled = true;
				menuItem15.Enabled = true;
				
				toolBarButton1.Enabled = false;
				toolBarButton2.Enabled = true;
				toolBarButton3.Enabled = true;
				toolBarButton4.Enabled  = true;
				toolBarButton11.Enabled  = true;
			}
			else {
				menuItem2.Enabled = true;
				menuItem3.Enabled = false;
				menuItem5.Enabled = false;
				menuItem11.Enabled = false;
				menuItem15.Enabled = false;

				toolBarButton1.Enabled = true;
				toolBarButton2.Enabled = false;
				toolBarButton3.Enabled = false;
				toolBarButton4.Enabled  = false;
				toolBarButton11.Enabled  = false;
			}
			return ;
		}

		/*	Set Message to status bar */
		public void SetStausMessage(string l_strMessage2){
			if ( l_strMessage2 != null ) {
				statusBarPanel2.Text = l_strMessage2;
			}
			m_statusBar.Refresh();
		}

        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        public static void Main(string[] args) 
        {
            Application.Run(new ExplorerDlg());
        }

    }

	class MRUConnections {
		private string m_strFTPServer;
		private string m_strUserID;
		
		public MRUConnections(){
			m_strFTPServer = "";
			m_strUserID = "";
		}

		public string FTPServer {
			get {
				return m_strFTPServer;
			}
			set {
				m_strFTPServer = value;
			}
		}

		public string FTPUser {
			get {
				return m_strUserID;
			}
			set {
				m_strUserID = value;
			}
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -