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

📄 pheiftpdlg.cpp

📁 非常小巧的FTP Client 程序
💻 CPP
📖 第 1 页 / 共 3 页
字号:
// pheiFTPDlg.cpp : implementation file
//

#include "stdafx.h"
#include "pheiFTP.h"
#include "pheiFTPDlg.h"
#include <stdlib.h>
#include "Site.h"
#include "DlgSaveSite.h"
#include "ManageSite.h"
#include "string.h"
#include "direct.h"
#include "Dirname.h"
#include "Fname.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#define ID_MENU_MAKELOCDIR 6101
#define ID_MENU_DELLOCDIR 6102
#define ID_MENU_DELLOCFILE 6103
#define ID_MENU_RENLOCFILE 6104
#define ID_MENU_MAKEREMDIR 6105
#define ID_MENU_DELREMDIR 6106
#define ID_MENU_DELREMFILE 6107
#define ID_MENU_RENREMFILE 6108
#define ID_MENU_SITE1 5101
#define ID_MENU_SITE2 5102
#define ID_MENU_SITE3 5103
#define ID_MENU_SITE4 5104
#define ID_MENU_SITE5 5105
#define ID_MENU_SITE6 5106
#define ID_MENU_SITE7 5107
#define ID_MENU_SITE8 5108
#define ID_MENU_SITE9 5109
#define ID_MENU_SITE10 5110 
#define ID_MENU_SITE11 5111
#define ID_MENU_SITE12 5112
#define ID_MENU_SITE13 5113
#define ID_MENU_SITE14 5114
#define ID_MENU_SITE15 5115
#define ID_MENU_SITE16 5116
#define ID_MENU_SITE17 5117
#define ID_MENU_SITE18 5118
#define ID_MENU_SITE19 5119
#define ID_MENU_SITE20 5120 
#define ID_MENU_SITE21 5121
#define ID_MENU_SITE22 5122
#define ID_MENU_SITE23 5123
#define ID_MENU_SITE24 5124
#define ID_MENU_SITE25 5125
#define ID_MENU_SITE26 5126
#define ID_MENU_SITE27 5127
#define ID_MENU_SITE28 5128
#define ID_MENU_SITE29 5129
#define ID_MENU_SITE30 5130 

/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// Dialog Data
	//{{AFX_DATA(CAboutDlg)
	enum { IDD = IDD_ABOUTBOX };
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CAboutDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	//{{AFX_MSG(CAboutDlg)
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
	//{{AFX_DATA_INIT(CAboutDlg)
	//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAboutDlg)
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{{AFX_MSG_MAP(CAboutDlg)
		// No message handlers
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CPheiFTPDlg dialog

CPheiFTPDlg::CPheiFTPDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CPheiFTPDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CPheiFTPDlg)
	m_password = _T("");
	m_port = _T("");
	m_server = _T("");
	m_status = _T("");
	m_user = _T("");
	m_remdir = _T("");
	m_locdir = _T("");
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CPheiFTPDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CPheiFTPDlg)
	DDX_Control(pDX, IDC_COMBO_LOCDIR, m_ctrllocdir);
	DDX_Control(pDX, IDC_LIST_REMFILE, m_remfile);
	DDX_Control(pDX, IDC_LIST_LOCFILE, m_locfile);
	DDX_Control(pDX, IDC_BUTTON_REMPARENT, m_remparent);
	DDX_Control(pDX, IDC_BUTTON_LOCPARENT, m_locparent);
	DDX_Text(pDX, IDC_EDIT_PASSWORD, m_password);
	DDV_MaxChars(pDX, m_password, 19);
	DDX_Text(pDX, IDC_EDIT_PORT, m_port);
	DDV_MaxChars(pDX, m_port, 9);
	DDX_Text(pDX, IDC_EDIT_SERVER, m_server);
	DDV_MaxChars(pDX, m_server, 39);
	DDX_Text(pDX, IDC_EDIT_STATUS, m_status);
	DDX_Text(pDX, IDC_EDIT_USER, m_user);
	DDV_MaxChars(pDX, m_user, 19);
	DDX_Text(pDX, IDC_EDIT_REMDIR, m_remdir);
	DDX_CBString(pDX, IDC_COMBO_LOCDIR, m_locdir);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CPheiFTPDlg, CDialog)
	//{{AFX_MSG_MAP(CPheiFTPDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_BUTTON_CONNECT, OnButtonConnect)
	ON_BN_CLICKED(IDC_BUTTON_DISCONNECT, OnButtonDisconnect)
	ON_BN_CLICKED(IDC_BUTTON_DOWNLOAD, OnButtonDownload)
	ON_BN_CLICKED(IDC_BUTTON_EXIT, OnButtonExit)
	ON_BN_CLICKED(IDC_BUTTON_LOADSITE, OnButtonLoadsite)
	ON_BN_CLICKED(IDC_BUTTON_SAVESITE, OnButtonSavesite)
	ON_BN_CLICKED(IDC_BUTTON_UPLOAD, OnButtonUpload)
	ON_BN_CLICKED(IDC_BUTTON_LOCPARENT, OnButtonLocparent)
	ON_BN_CLICKED(IDC_BUTTON_REMPARENT, OnButtonRemparent)
	ON_NOTIFY(NM_DBLCLK, IDC_LIST_LOCFILE, OnDblclkListLocfile)
	ON_CBN_SELCHANGE(IDC_COMBO_LOCDIR, OnSelchangeComboLocdir)
	ON_CBN_KILLFOCUS(IDC_COMBO_LOCDIR, OnKillfocusComboLocdir)
	ON_CBN_SETFOCUS(IDC_COMBO_LOCDIR, OnSetfocusComboLocdir)
	ON_NOTIFY(NM_DBLCLK, IDC_LIST_REMFILE, OnDblclkListRemfile)
	ON_BN_CLICKED(IDC_BUTTON_MANAGESITE, OnButtonManagesite)
	ON_WM_CONTEXTMENU()
	//}}AFX_MSG_MAP
	    ON_COMMAND(ID_MENU_MAKELOCDIR, OnMakeLocdir)
		ON_COMMAND(ID_MENU_DELLOCDIR, OnDelLocdir)
		ON_COMMAND(ID_MENU_DELLOCFILE, OnDelLocfile)
		ON_COMMAND(ID_MENU_RENLOCFILE, OnRenLocfile)
	    ON_COMMAND(ID_MENU_MAKEREMDIR, OnMakeRemdir)
		ON_COMMAND(ID_MENU_DELREMDIR, OnDelRemdir)
		ON_COMMAND(ID_MENU_DELREMFILE, OnDelRemfile)
		ON_COMMAND(ID_MENU_RENREMFILE, OnRenRemfile)
		ON_COMMAND(ID_MENU_SITE1, OnSite1)
		ON_COMMAND(ID_MENU_SITE2, OnSite2)
		ON_COMMAND(ID_MENU_SITE3, OnSite3)
		ON_COMMAND(ID_MENU_SITE4, OnSite4)
		ON_COMMAND(ID_MENU_SITE5, OnSite5)
		ON_COMMAND(ID_MENU_SITE6, OnSite6)
		ON_COMMAND(ID_MENU_SITE7, OnSite7)
		ON_COMMAND(ID_MENU_SITE8, OnSite8)
		ON_COMMAND(ID_MENU_SITE9, OnSite9)
		ON_COMMAND(ID_MENU_SITE10, OnSite10)
		ON_COMMAND(ID_MENU_SITE11, OnSite11)
		ON_COMMAND(ID_MENU_SITE12, OnSite12)
		ON_COMMAND(ID_MENU_SITE13, OnSite13)
		ON_COMMAND(ID_MENU_SITE14, OnSite14)
		ON_COMMAND(ID_MENU_SITE15, OnSite15)
		ON_COMMAND(ID_MENU_SITE16, OnSite16)
		ON_COMMAND(ID_MENU_SITE17, OnSite17)
		ON_COMMAND(ID_MENU_SITE18, OnSite18)
		ON_COMMAND(ID_MENU_SITE19, OnSite19)
		ON_COMMAND(ID_MENU_SITE20, OnSite20)
		ON_COMMAND(ID_MENU_SITE21, OnSite21)
		ON_COMMAND(ID_MENU_SITE22, OnSite22)
		ON_COMMAND(ID_MENU_SITE23, OnSite23)
		ON_COMMAND(ID_MENU_SITE24, OnSite24)
		ON_COMMAND(ID_MENU_SITE25, OnSite25)
		ON_COMMAND(ID_MENU_SITE26, OnSite26)
		ON_COMMAND(ID_MENU_SITE27, OnSite27)
		ON_COMMAND(ID_MENU_SITE28, OnSite28)
		ON_COMMAND(ID_MENU_SITE29, OnSite29)
		ON_COMMAND(ID_MENU_SITE30, OnSite30)

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CPheiFTPDlg message handlers

BOOL CPheiFTPDlg::OnInitDialog()
{

	CDialog::OnInitDialog();

	// Add "About..." menu item to system menu.

	// IDM_ABOUTBOX must be in the system command range.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	// TODO: Add extra initialization here
	//set bitmap to button(parent);
    bmpparent.LoadBitmap(IDB_BITMAP_PARENT);
    HBITMAP hbp=HBITMAP(bmpparent);
	m_locparent.SetBitmap(hbp);
	m_remparent.SetBitmap(hbp);

	//set imagelist for listctrl
    crMask=0; 
	fimage.LoadBitmap(IDB_BITMAP_FILE);
	dimage.LoadBitmap(IDB_BITMAP_DIR);
	eimage.LoadBitmap(IDB_BITMAP_EXE);
	himage.LoadBitmap(IDB_BITMAP_HTM);
    fdimage.Create(IDB_BITMAP_MP3,15,1,crMask);
	fdimage.Add(&fimage,crMask);
    fdimage.Add(&dimage,crMask);
	fdimage.Add(&eimage,crMask);
	fdimage.Add(&himage,crMask);
	m_locfile.SetImageList(&fdimage,LVSIL_SMALL);
	m_remfile.SetImageList(&fdimage,LVSIL_SMALL);


	//set the status bar
	m_status=_T("Status:");
	UpdateData(false);

	//set the local dir
	CString initlocdir;
	SetLocDir(initlocdir);

	//read from sitemng to fill in the sitearray
	strcpy(code,"IampheipheiXueSheng"); 
	sitecount=0;
	if(sitefile.Open("sitemng",CFile::modeRead))
	{
	     sitecount=(int)sitefile.GetLength()/100;
		 sitefile.SeekToBegin();
		 for(int si=0;si<sitecount;si++)
		 {
              sitefile.Read(sitearray[si].name,10);
			  sitefile.Read(sitearray[si].server,40);
			  sitefile.Read(sitearray[si].user,20);
			  sitefile.Read(sitearray[si].password,20);
			  sitefile.Read(sitearray[si].port,10);
			  for(int ic=0;ic<20;ic++)
			  {
				  char ccode=code[ic];
				  char cpassword=sitearray[si].password[ic];
                  sitearray[si].password[ic]=cpassword - ccode;
			  }
		 }
       sitefile.Close();
	}

	//initialize
	slope=_T("\\");
	flagconnect=false;
 
	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CPheiFTPDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CPheiFTPDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
	
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CPheiFTPDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

void CPheiFTPDlg::OnButtonConnect() 
{
   if(flagconnect)
   {
	     m_pFtpConnection->Close();
	     m_pInetSession->Close();
	     m_remdir.Empty();
      	 m_remfile.DeleteAllItems();
	     flagconnect=false;
   }
   UpdateData(TRUE);
   if(m_user.IsEmpty())
	   m_user=_T("anonymous");
   if(m_password.IsEmpty())
	   m_password=_T("guest@my.net");
   if(m_port.IsEmpty())
	   m_port=_T("21");

   char tcarray[10];
   strcpy(tcarray,LPCTSTR(m_port));
   nPort=atoi(tcarray);

   m_pInetSession = new CInternetSession(NULL, 1, INTERNET_OPEN_TYPE_PRECONFIG);
   m_pFtpConnection=m_pInetSession->GetFtpConnection(m_server, m_user,m_password, nPort); 
 
   if(m_pFtpConnection->GetCurrentDirectory(m_remdir))
   {
	   flagconnect=true;
	   SetRemDir(m_remdir);
	   UpdateData(FALSE);
   }

	
}

void CPheiFTPDlg::OnButtonDisconnect() 
{
	if(flagconnect)
	{
	     m_pFtpConnection->Close();
	     m_pInetSession->Close();
	     m_remdir.Empty();
      	 m_remfile.DeleteAllItems();
	     flagconnect=false;
	     UpdateData(FALSE);
	}
}

void CPheiFTPDlg::OnButtonDownload() 
{
	if(!flagconnect)
		return;
	bool flagdir=false;
	CListCtrl* pList=&m_remfile;
	int nItem;

    POSITION pos = pList->GetFirstSelectedItemPosition();
    if (pos == NULL)
	{
		AfxMessageBox("No file selected!");
		return;
	}
    while (pos)
	{
        nItem = pList->GetNextSelectedItem(pos);
		CString selfile;
        selfile=pList->GetItemText(nItem,0);

        //download selected dir and file
 	    CFtpFileFind ftpFind(m_pFtpConnection);
		CString strremdir=m_remdir+_T("/*.*");
        BOOL bContinue = ftpFind.FindFile(strremdir);
	    CString strFileName;
 	    if (!bContinue)
		{
			ftpFind.Close();
		    return;
		}
	    while (bContinue) 
		{
			bContinue = ftpFind.FindNextFile();
		    strFileName = ftpFind.GetFileName();
            if(strFileName==selfile)
			{
	            if(ftpFind.IsDirectory())
				{
					flagdir=true;
					break;
				}
           	    else
					Downloadsf(strFileName);              
			}
			else
		        continue;
		}
	    ftpFind.Close();
		if(flagdir)   DownloadDir(strFileName);
		           
	}
	
	SetLocDir(m_locdir);
}

void CPheiFTPDlg::OnButtonExit() 
{
	exit(0);
}

void CPheiFTPDlg::OnButtonLoadsite() 
{
   	CMenu menusite;
	if(menusite.CreatePopupMenu())
	{
		for(int tmi=0;tmi<sitecount;tmi++)
		{
             menusite.AppendMenu(MF_STRING,5101+tmi,sitearray[tmi].name);
		}

		CRect rectls;
		GetDlgItem(IDC_BUTTON_LOADSITE)->GetWindowRect(rectls);
		menusite.TrackPopupMenu(TPM_LEFTALIGN,rectls.left,rectls.bottom,this);
	}
	
}

void CPheiFTPDlg::OnButtonSavesite() 
{
	if(sitecount>=30)
		return;
	CDlgSaveSite dlgss;
	CString tempcs;
	tempcs.Format("site%d",sitecount+1);
	dlgss.m_sitename=tempcs;

	if(dlgss.DoModal()==IDOK)
	{
 		strcpy(sitearray[sitecount].name,dlgss.m_sitename);
		strcpy(sitearray[sitecount].server,m_server);
		strcpy(sitearray[sitecount].user,m_user);
		strcpy(sitearray[sitecount].password,m_password);
		strcpy(sitearray[sitecount].port,m_port);

		for(int icmp=0;icmp<sitecount;icmp++)
		{
           if(!sitearray[sitecount].sitecmp(sitearray[icmp]))
			   return;
		}

        sitecount++;	
	}

	if(sitefile.Open("sitemng",CFile::modeCreate | CFile::modeWrite))
	{
		 char codedpassword[20];
		 for(int si=0;si<sitecount;si++)
		 {
			  for(int ic=0;ic<20;ic++)
			  {
				  char ccode=code[ic];
				  char cpassword=sitearray[si].password[ic];
                  codedpassword[ic]=cpassword + ccode;
			  }
              sitefile.Write(sitearray[si].name,10);
			  sitefile.Write(sitearray[si].server,40);
			  sitefile.Write(sitearray[si].user,20);
			  sitefile.Write(codedpassword,20);
			  sitefile.Write(sitearray[si].port,10);
		 }
		 sitefile.Flush();
       sitefile.Close();
	}
	
}

void CPheiFTPDlg::OnButtonUpload() 
{
	if(!flagconnect)
		return;
	CListCtrl* pList=&m_locfile;
	int nItem;

    POSITION pos = pList->GetFirstSelectedItemPosition();
    if (pos == NULL)
    AfxMessageBox("No file selected!");
    else
	{
        while (pos)
		{
          nItem = pList->GetNextSelectedItem(pos);
		  CString selfile;
          selfile=pList->GetItemText(nItem,0);

		  //upload selected dir and file
		  CFileFind finder;
          CString strallfd=m_locdir+_T("\\")+selfile;
          CString currfd;
          BOOL bWorking = finder.FindFile(strallfd);
          if(bWorking)
		  {  

⌨️ 快捷键说明

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