FTPDLG.CPP
上传用户:szlsqc
上传日期:2015-05-05
资源大小:149k
文件大小:11k
源码类别:

Ftp服务器

开发平台:

C/C++

  1. // FtpDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "afxinet.h"
  5. #include "FtpFile.h"
  6. #include "FtpDlg.h"
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12. /////////////////////////////////////////////////////////////////////////////
  13. // CAboutDlg dialog used for App About
  14. class CAboutDlg : public CDialog
  15. {
  16. public:
  17. CAboutDlg();
  18. // Dialog Data
  19. //{{AFX_DATA(CAboutDlg)
  20. enum { IDD = IDD_ABOUTBOX };
  21. //}}AFX_DATA
  22. // ClassWizard generated virtual function overrides
  23. //{{AFX_VIRTUAL(CAboutDlg)
  24. protected:
  25. virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
  26. //}}AFX_VIRTUAL
  27. // Implementation
  28. protected:
  29. //{{AFX_MSG(CAboutDlg)
  30. //}}AFX_MSG
  31. DECLARE_MESSAGE_MAP()
  32. };
  33. CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
  34. {
  35. //{{AFX_DATA_INIT(CAboutDlg)
  36. //}}AFX_DATA_INIT
  37. }
  38. void CAboutDlg::DoDataExchange(CDataExchange* pDX)
  39. {
  40. CDialog::DoDataExchange(pDX);
  41. //{{AFX_DATA_MAP(CAboutDlg)
  42. //}}AFX_DATA_MAP
  43. }
  44. BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
  45. //{{AFX_MSG_MAP(CAboutDlg)
  46. // No message handlers
  47. //}}AFX_MSG_MAP
  48. END_MESSAGE_MAP()
  49. /////////////////////////////////////////////////////////////////////////////
  50. // CFtpDlg dialog
  51. CFtpDlg::CFtpDlg(CWnd* pParent /*=NULL*/)
  52. : CDialog(CFtpDlg::IDD, pParent)
  53. {
  54. //{{AFX_DATA_INIT(CFtpDlg)
  55. m_strFtpSite = _T("");
  56. m_strName = _T("");
  57. m_strPwd = _T("");
  58. //}}AFX_DATA_INIT
  59. // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
  60. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  61. }
  62. void CFtpDlg::DoDataExchange(CDataExchange* pDX)
  63. {
  64. CDialog::DoDataExchange(pDX);
  65. //{{AFX_DATA_MAP(CFtpDlg)
  66. DDX_Control(pDX, IDOK, m_BtnQuery);
  67. DDX_Control(pDX, IDC_UPLOAD, m_BtnUpLoad);
  68. DDX_Control(pDX, IDC_STATIC_PWD, m_StaPwd);
  69. DDX_Control(pDX, IDC_STATIC_NAME, m_StaName);
  70. DDX_Control(pDX, IDC_STATIC_FTP, m_StaFtp);
  71. DDX_Control(pDX, IDC_EDIT_PWD, m_EditPwd);
  72. DDX_Control(pDX, IDC_EDIT_NAME, m_EditName);
  73. DDX_Control(pDX, IDC_EDIT_FTP, m_EditFtp);
  74. DDX_Control(pDX, IDC_DOWNLOAD, m_BtnDownLoad);
  75. DDX_Control(pDX, IDC_LIST_FILE, m_ListFile);
  76. DDX_Text(pDX, IDC_EDIT_FTP, m_strFtpSite);
  77. DDX_Text(pDX, IDC_EDIT_NAME, m_strName);
  78. DDX_Text(pDX, IDC_EDIT_PWD, m_strPwd);
  79. //}}AFX_DATA_MAP
  80. }
  81. BEGIN_MESSAGE_MAP(CFtpDlg, CDialog)
  82. //{{AFX_MSG_MAP(CFtpDlg)
  83. ON_WM_SYSCOMMAND()
  84. ON_WM_PAINT()
  85. ON_WM_QUERYDRAGICON()
  86. ON_BN_CLICKED(IDOK, OnQuery)
  87. ON_LBN_SELCHANGE(IDC_LIST_FILE, OnSelchangeListFile)
  88. ON_BN_CLICKED(IDC_DOWNLOAD, OnDownload)
  89. ON_BN_CLICKED(IDC_UPLOAD, OnUpload)
  90. ON_WM_RBUTTONDOWN()
  91. //}}AFX_MSG_MAP
  92. END_MESSAGE_MAP()
  93. /////////////////////////////////////////////////////////////////////////////
  94. // CFtpDlg message handlers
  95. BOOL CFtpDlg::OnInitDialog()
  96. {
  97. CDialog::OnInitDialog();
  98. // Add "About..." menu item to system menu.
  99. // IDM_ABOUTBOX must be in the system command range.
  100. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
  101. ASSERT(IDM_ABOUTBOX < 0xF000);
  102. CMenu* pSysMenu = GetSystemMenu(FALSE);
  103. if (pSysMenu != NULL)
  104. {
  105. CString strAboutMenu;
  106. strAboutMenu.LoadString(IDS_ABOUTBOX);
  107. if (!strAboutMenu.IsEmpty())
  108. {
  109. pSysMenu->AppendMenu(MF_SEPARATOR);
  110. pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  111. }
  112. }
  113. // Set the icon for this dialog.  The framework does this automatically
  114. //  when the application's main window is not a dialog
  115. SetIcon(m_hIcon, TRUE); // Set big icon
  116. SetIcon(m_hIcon, FALSE); // Set small icon
  117. // TODO: Add extra initialization here
  118. //域名初始化
  119. m_strFtpSite=_T("");
  120. //登录名初始化
  121. m_strName=_T("");
  122. //口令初始化
  123. m_strPwd=_T("");
  124. //更新界面
  125. UpdateData(FALSE);
  126. return TRUE;  // return TRUE  unless you set the focus to a control
  127. }
  128. void CFtpDlg::OnSysCommand(UINT nID, LPARAM lParam)
  129. {
  130. if ((nID & 0xFFF0) == IDM_ABOUTBOX)
  131. {
  132. CAboutDlg dlgAbout;
  133. dlgAbout.DoModal();
  134. }
  135. else
  136. {
  137. CDialog::OnSysCommand(nID, lParam);
  138. }
  139. }
  140. // If you add a minimize button to your dialog, you will need the code below
  141. //  to draw the icon.  For MFC applications using the document/view model,
  142. //  this is automatically done for you by the framework.
  143. void CFtpDlg::OnPaint() 
  144. {
  145. if (IsIconic())
  146. {
  147. CPaintDC dc(this); // device context for painting
  148. SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
  149. // Center icon in client rectangle
  150. int cxIcon = GetSystemMetrics(SM_CXICON);
  151. int cyIcon = GetSystemMetrics(SM_CYICON);
  152. CRect rect;
  153. GetClientRect(&rect);
  154. int x = (rect.Width() - cxIcon + 1) / 2;
  155. int y = (rect.Height() - cyIcon + 1) / 2;
  156. // Draw the icon
  157. dc.DrawIcon(x, y, m_hIcon);
  158. }
  159. else
  160. {
  161. CDialog::OnPaint();
  162. }
  163. }
  164. // The system calls this to obtain the cursor to display while the user drags
  165. //  the minimized window.
  166. HCURSOR CFtpDlg::OnQueryDragIcon()
  167. {
  168. return (HCURSOR) m_hIcon;
  169. }
  170. void CFtpDlg::OnQuery() 
  171. {
  172. //获得当前输入
  173. UpdateData(TRUE);
  174. //清除列表框的内容
  175. while(m_ListFile.GetCount()!=0)
  176. m_ListFile.DeleteString(0);
  177. //显示文件和目录名
  178. ListContent();
  179. }
  180. void CFtpDlg::ListContent()
  181. {
  182. CInternetSession* pSession;
  183. CFtpConnection* pConnection;
  184. CFtpFileFind* pFileFind;
  185. CString strFileName;
  186. BOOL bContinue;
  187. pConnection=NULL;
  188. pFileFind=NULL;
  189. //创建Internet会话
  190. pSession=new CInternetSession( AfxGetAppName(),
  191. 1,
  192. PRE_CONFIG_INTERNET_ACCESS);
  193. try
  194. {
  195. //试图建立FTP连接
  196. pConnection=pSession->GetFtpConnection(m_strFtpSite,
  197. m_strName,m_strPwd);
  198. }
  199. catch (CInternetException* e)
  200. {
  201. //错误处理
  202. e->Delete();
  203. pConnection=NULL;
  204. }
  205. if (pConnection!=NULL)
  206. {
  207. //创建CFtpFileFind对象
  208. //传递CFtpConnection对象的指针
  209. pFileFind=new CFtpFileFind(pConnection);
  210. //查找任意文件
  211. bContinue=pFileFind->FindFile("*");
  212. if (!bContinue)
  213. {
  214. //查找完毕
  215. pFileFind->Close();
  216. pFileFind=NULL;
  217. }
  218. while (bContinue)
  219. {
  220. //查找下一个文件
  221. bContinue=pFileFind->FindNextFile();
  222. //获得找到的文件的文件名
  223. strFileName=pFileFind->GetFileName();
  224. if (pFileFind->IsDirectory())
  225. {
  226. //找到的是否目录
  227. //标记目录名
  228. strFileName="["+strFileName;
  229. strFileName+="]";
  230. }
  231. //显示查找的内容
  232. m_ListFile.AddString(strFileName);
  233. }
  234. if (pFileFind!=NULL)
  235. {
  236. //查询结束
  237. pFileFind->Close();
  238. pFileFind=NULL;
  239. }
  240. }
  241. //删除对象
  242. delete pFileFind;
  243. if (pConnection!=NULL)
  244. {
  245. pConnection->Close();
  246. delete pConnection;
  247. }
  248. delete pSession;
  249. }
  250. void CFtpDlg::OnSelchangeListFile() 
  251. {
  252. //禁用用来输入的文本和编辑框控件
  253. m_EditFtp.EnableWindow(FALSE);
  254. m_EditName.EnableWindow(FALSE);
  255. m_EditPwd.EnableWindow(FALSE);
  256. m_StaFtp.EnableWindow(FALSE);
  257. m_StaName.EnableWindow(FALSE);
  258. m_StaPwd.EnableWindow(FALSE);
  259. //禁用查询和上传按钮
  260. m_BtnUpLoad.EnableWindow(FALSE);
  261. m_BtnQuery.EnableWindow(FALSE);
  262. //激活下载按钮
  263. m_BtnDownLoad.EnableWindow(TRUE);
  264. }
  265. void CFtpDlg::OnDownload() 
  266. {
  267. //获得当前输入
  268. UpdateData(TRUE);
  269. int nSel=m_ListFile.GetCurSel();
  270. CString strSourceName;
  271. //获得用户在列表框中的选择
  272. nSel=m_ListFile.GetCurSel();
  273. m_ListFile.GetText(nSel,strSourceName);
  274. if (strSourceName.GetAt(0)!='[')
  275. {
  276. //选择的是文件
  277. CString strDestName;
  278. CFileDialog dlg(FALSE,"","*.*");
  279. if (dlg.DoModal()==IDOK)
  280. {
  281. //获得下载文件在本地机上存储的路径和名称
  282. strDestName=dlg.GetPathName();
  283. //调用函数下载文件
  284. if (GetFile(strSourceName,strDestName))
  285. AfxMessageBox("下载成功!",MB_OK|MB_ICONINFORMATION);
  286. else
  287. AfxMessageBox("下载失败!",MB_OK|MB_ICONSTOP);
  288. }
  289. else
  290. {
  291. AfxMessageBox("请写入文件名!",MB_OK|MB_ICONSTOP);
  292. }
  293. }
  294. else
  295. {
  296. //选择的是目录
  297. AfxMessageBox("不能下载目录!n请重选!",MB_OK|MB_ICONSTOP);
  298. }
  299. //禁用下载按钮
  300. m_BtnDownLoad.EnableWindow(FALSE);
  301. //激活查询和上传按钮
  302. m_BtnUpLoad.EnableWindow(TRUE);
  303. m_BtnQuery.EnableWindow(TRUE);
  304. //激活用来输入的文本和编辑框控件
  305. m_EditFtp.EnableWindow(TRUE);
  306. m_EditName.EnableWindow(TRUE);
  307. m_EditPwd.EnableWindow(TRUE);
  308. m_StaFtp.EnableWindow(TRUE);
  309. m_StaName.EnableWindow(TRUE);
  310. m_StaPwd.EnableWindow(TRUE);
  311. }
  312. BOOL CFtpDlg::GetFile(CString strSourceName, CString strDestName)
  313. {
  314. CInternetSession* pSession;
  315. CFtpConnection* pConnection;
  316. pConnection=NULL;
  317. //创建Internet会话
  318. pSession=new CInternetSession( AfxGetAppName(),
  319. 1,
  320. PRE_CONFIG_INTERNET_ACCESS);
  321. try
  322. {
  323. //建立FTP连接
  324. pConnection=pSession->GetFtpConnection( m_strFtpSite,
  325. m_strName,
  326. m_strPwd);
  327. }
  328. catch (CInternetException* e)
  329. {
  330. //错误处理
  331. e->Delete();
  332. pConnection=NULL;
  333. return FALSE;
  334. }
  335. if (pConnection!=NULL)
  336. {
  337. //下载文件
  338. if (!pConnection->GetFile(strSourceName,strDestName))
  339. {
  340. //下载文件错误
  341. pConnection->Close();
  342. delete pConnection;
  343. delete pSession;
  344. return FALSE;
  345. }
  346. }
  347. //清除对象
  348. if (pConnection!=NULL)
  349. {
  350. pConnection->Close();
  351. delete pConnection;
  352. }
  353. delete pSession;
  354. return TRUE;
  355. }
  356. void CFtpDlg::OnUpload() 
  357. {
  358. //获得当前输入
  359. UpdateData(TRUE);
  360. //禁用用于输入的文本和编辑控件
  361. m_EditFtp.EnableWindow(FALSE);
  362. m_EditName.EnableWindow(FALSE);
  363. m_EditPwd.EnableWindow(FALSE);
  364. m_StaFtp.EnableWindow(FALSE);
  365. m_StaName.EnableWindow(FALSE);
  366. m_StaPwd.EnableWindow(FALSE);
  367. //禁用查询按钮
  368. m_BtnQuery.EnableWindow(FALSE);
  369. CString strSourceName;
  370. CString strDestName;
  371. CFileDialog dlg(TRUE,"","*.*");
  372. if (dlg.DoModal()==IDOK)
  373. {
  374. //获得待上传的本地机文件路径和文件名
  375. strSourceName=dlg.GetPathName();
  376. strDestName=dlg.GetFileName();
  377. //调用函数上传文件
  378. if (PutFile(strSourceName,strDestName))
  379. AfxMessageBox("上传成功!",MB_OK|MB_ICONINFORMATION);
  380. else
  381. AfxMessageBox("上传失败!",MB_OK|MB_ICONSTOP);
  382. }
  383. else
  384. {
  385. //文件选择有错误
  386. AfxMessageBox("请选择文件!",MB_OK|MB_ICONSTOP);
  387. }
  388. //激活查询按钮
  389. m_BtnQuery.EnableWindow(TRUE);
  390. //激活用于输入的文本和编辑控件
  391. m_EditFtp.EnableWindow(TRUE);
  392. m_EditName.EnableWindow(TRUE);
  393. m_EditPwd.EnableWindow(TRUE);
  394. m_StaFtp.EnableWindow(TRUE);
  395. m_StaName.EnableWindow(TRUE);
  396. m_StaPwd.EnableWindow(TRUE);
  397. }
  398. BOOL CFtpDlg::PutFile(CString strSourceName, CString strDestName)
  399. {
  400. CInternetSession* pSession;
  401. CFtpConnection* pConnection;
  402. pConnection=NULL;
  403. //创建Internet会话
  404. pSession=new CInternetSession( AfxGetAppName(),
  405. 1,
  406. PRE_CONFIG_INTERNET_ACCESS);
  407. try
  408. {
  409. //建立FTP连接
  410. pConnection=pSession->GetFtpConnection( m_strFtpSite,
  411. m_strName,
  412. m_strPwd);
  413. }
  414. catch (CInternetException* e)
  415. {
  416. //错误处理
  417. e->Delete();
  418. pConnection=NULL;
  419. return FALSE;
  420. }
  421. if (pConnection!=NULL)
  422. {
  423. //上传文件
  424. if (!pConnection->PutFile(strSourceName,strDestName))
  425. {
  426. //上传文件错误
  427. pConnection->Close();
  428. delete pConnection;
  429. delete pSession;
  430. return FALSE;
  431. }
  432. }
  433. //清除对象
  434. if (pConnection!=NULL)
  435. {
  436. pConnection->Close();
  437. delete pConnection;
  438. }
  439. delete pSession;
  440. return TRUE;
  441. }
  442. void CFtpDlg::OnRButtonDown(UINT nFlags, CPoint point) 
  443. {
  444. // TODO: Add your message handler code here and/or call default
  445. //禁用下载按钮
  446. m_BtnDownLoad.EnableWindow(FALSE);
  447. //激活查询和上传按钮
  448. m_BtnUpLoad.EnableWindow(TRUE);
  449. m_BtnQuery.EnableWindow(TRUE);
  450. //激活用来输入的文本和编辑框控件
  451. m_EditFtp.EnableWindow(TRUE);
  452. m_EditName.EnableWindow(TRUE);
  453. m_EditPwd.EnableWindow(TRUE);
  454. m_StaFtp.EnableWindow(TRUE);
  455. m_StaName.EnableWindow(TRUE);
  456. m_StaPwd.EnableWindow(TRUE);
  457. CDialog::OnRButtonDown(nFlags, point);
  458. }