FTP基于MFC对话框的建立

原创 2018年04月15日 13:24:50

FTP的界面设计如下:



定义的对应变量如下,已经设置了对应的按钮响应事件:



相关函数完成的代码如下:

void CMFCApplication1Dlg::OnConnect() //连接
{
// TODO:  在此添加控件通知处理程序代码
this->ConnectFtp();
this->UpdateDir();
FtpIP.EnableWindow(FALSE);
FtpLogin.EnableWindow(FALSE);
FtpDisconnect.EnableWindow(TRUE);
FileInside.EnableWindow(TRUE);
FileUpload.EnableWindow(TRUE);
FileDownload.EnableWindow(TRUE);
FileDelete.EnableWindow(TRUE);
FtpNonameLog.EnableWindow(FALSE);
}




void CMFCApplication1Dlg::OnEnterDir()  //进入文件夹
{
// TODO:  在此添加控件通知处理程序代码
CString selfile;
//获取用户选择的目录名
FileName.GetText(FileName.GetCurSel(), selfile);
if (!selfile.IsEmpty())
{
pFtpConnection->Close(); //关闭废弃的会话句柄
this->ConnectFtp(); //重新连接
pFtpConnection->SetCurrentDirectory(selfile); //改变目录到当前目录
this->UpdateDir(); //更新目录列表


}
}




void CMFCApplication1Dlg::OnGoBack() //返回上一级文件
{
// TODO:  在此添加控件通知处理程序代码
CString strdir;
pFtpConnection->GetCurrentDirectory(strdir);
int pos;
//用字符串截取的方法获得上一级目录
pos = strdir.ReverseFind('/');
strdir = strdir.Left(pos);
pInternetSession->Close(); //关闭废弃会话
this->ConnectFtp();
pFtpConnection->SetCurrentDirectory(strdir);
this->UpdateDir();//更新目录
}




void CMFCApplication1Dlg::OnDisconnect() //断开连接
{
// TODO:  在此添加控件通知处理程序代码
pInternetSession->Close();
FileName.ResetContent();
FileName.AddString(L"连接已经断开!!");
FtpIP.EnableWindow(true);
FtpLogin.EnableWindow(true);
FtpDisconnect.EnableWindow(false);
FileInside.EnableWindow(false);
FileOutside.EnableWindow(false);
FileUpload.EnableWindow(false);
FileDownload.EnableWindow(false);
FileDelete.EnableWindow(false);
FtpNonameLog.EnableWindow(true);
}




void CMFCApplication1Dlg::OnUpLoad() //上传文件
{
// TODO:  在此添加控件通知处理程序代码
CString str;
CString strname;
//弹出“打开”对话框
CFileDialog file(true, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, L"所有文件(*.*)|*.*|", this);
if (file.DoModal() == IDOK)
{
str = file.GetPathName();
strname = file.GetFileName();
}
if (bconnect)
{
CString strdir;
pFtpConnection->GetCurrentDirectory(strdir);
//上传文件
BOOL bput = pFtpConnection->PutFile((LPCTSTR)str, (LPCTSTR)strname);
if (bput)
{
pInternetSession->Close();//关闭会话
this->ConnectFtp();//重新连接保持持续会话
pFtpConnection->SetCurrentDirectory(strdir);
this->UpdateDir();//更新目录列表
AfxMessageBox(_T("上传成功!"));
}
}
}




void CMFCApplication1Dlg::OnDownload() //下载文件
{
// TODO:  在此添加控件通知处理程序代码
CString selfile;
FileName.GetText(FileName.GetCurSel(), selfile);//获得想要下载资源名
if (!selfile.IsEmpty())
{
//弹出另存为对话框
CFileDialog file(FALSE, NULL, selfile, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, L"所有文件(*.*)|*.*|", this);
if (file.DoModal() == IDOK)
{
CString strname;
strname = file.GetFileName();
CString strdir;
pFtpConnection->GetCurrentDirectory(strdir);
pFtpConnection->GetFile(selfile, strname);//下载文件到的本地位置
pInternetSession->Close();
this->ConnectFtp();
pFtpConnection->SetCurrentDirectory(strdir);
this->UpdateDir();
AfxMessageBox(_T("下载成功!"));
}


}
}




void CMFCApplication1Dlg::OnDelete()  //删除文件
{
// TODO:  在此添加控件通知处理程序代码
CString selfile;
FileName.GetText(FileName.GetCurSel(), selfile);//获取用户要删除的资源名
if (!selfile.IsEmpty())
{
if (AfxMessageBox(L"确定要删除这个文件?", 4 + 48) == 6)
{
pFtpConnection->Remove(selfile);
}
CString strdir;
pFtpConnection->GetCurrentDirectory(strdir);
pInternetSession->Close();
this->ConnectFtp();
pFtpConnection->SetCurrentDirectory(strdir);
this->UpdateDir();
}
}




void CMFCApplication1Dlg::OnNoName()  //匿名登陆
{
// TODO:  在此添加控件通知处理程序代码
int icheck = FtpNonameLog.GetCheck();
if (icheck == 1)
{
//匿名登陆
Ftpuser.EnableWindow(FALSE);
FtpPassword.EnableWindow(FALSE);
Ftpuser.SetWindowText(L"anonymous");
FtpPassword.SetWindowText(L"");
UpdateData();
CString str;
FtpIP.GetWindowText(str);
if (!(str == ""))   //如果IP不为空,可以连接
{
FtpLogin.EnableWindow(TRUE);
}

}
else  //不按要求输入不能连接
{
Ftpuser.EnableWindow(TRUE);
FtpPassword.EnableWindow(TRUE);
Ftpuser.SetWindowText(L"");
FtpPassword.SetWindowText(L"");
FtpLogin.EnableWindow(FALSE);
}


}


void CMFCApplication1Dlg::ConnectFtp()  //FTP连接
{
BYTE nFild[4];
UpdateData();
CString sip,strusr,strpwd;
Ftpuser.GetWindowText(strusr);
FtpPassword.GetWindowText(strpwd);
FtpIP.GetWindowText(sip);
if (sip.IsEmpty())
{
AfxMessageBox(_T("IP地址为空!"));
return;
}
pInternetSession = new CInternetSession(L"MR", INTERNET_OPEN_TYPE_PRECONFIG);


try
{
pFtpConnection = pInternetSession->GetFtpConnection(sip, strusr, strpwd, atoi("21"));
bconnect=true;
}
catch (CInternetException* pEx)
{
TCHAR szErr[1024];
pEx->GetErrorMessage(szErr, 1024);
AfxMessageBox(szErr);
pEx->Delete();
}
}


void CMFCApplication1Dlg::UpdateDir()  //更新列表的文件目录
{
FileName.ResetContent();
//创建一个CFtpFileFind实例
CFtpFileFind ftpfind(pFtpConnection);
CString strdirpath;
pFtpConnection->GetCurrentDirectory(strdirpath);
//找到第一个文件或者文件夹
BOOL bfind = ftpfind.FindFile(strdirpath);
while (bfind)
{
bfind = ftpfind.FindNextFile();
CString strpath;
if (ftpfind.IsDots())
continue;
if (!ftpfind.IsDirectory())  //判断是目录还是文件
{
strpath = ftpfind.GetFileName(); //文件则读取文件名
FileName.AddString(strpath);
}
else
{
strpath = ftpfind.GetFilePath();
FileName.AddString(strpath);
}
}
}

MFC入门应用

-
  • 1970年01月01日 08:00

MFC基于对话框工程运行逻辑

1、 2、 3、 4、 5、 6、 7、 8、 9、 10、
  • wwkaven
  • wwkaven
  • 2014-08-29 06:21:31
  • 1255

再探MFC(一)基于对话框的MFC应用程序项目框架

大学毕设时学的MFC,工作头一年还用的MFC,之后再也用不到了.当时买的MFC书籍早就束之高阁了.现在需要开发一个简单的桌面程序,于是我又把MFC捡起来.MFC早已过时,不过如果开发简单的Window...
  • soliddream66
  • soliddream66
  • 2015-03-26 13:07:59
  • 2114

VS2013 MFC基于对话框编程(创建工程)

一、新建MFC项目 选择:基于对话框MFC的使用:  在共享DLL中使用MFC (程序运行需要dll)  在静态库中使用MFC (程序较大,运行时不需要dll)  设置MFC程序主框架样式...
  • u011555996
  • u011555996
  • 2018-02-01 10:59:09
  • 108

VS2010对话框,FTP遍历目录显示在对话框中,选择列表项下载文件或者目录主程序代码

新手入门,借鉴了很多地方写的
  • aspirine0421
  • aspirine0421
  • 2017-03-07 14:46:05
  • 373

创建MFC应用程序的类型:单文档+多文档+基于对话框

单文档支持文档视图架构,数据的保存--(读取--修改)文档类功能--显示(视图类功能),比较方便。 基于对话框,主窗口是对话框类型,可以方便的使用控件,所见即所得的编程,比较方便。 单文档类似“记事...
  • ghevinn
  • ghevinn
  • 2015-07-10 18:06:47
  • 5733

MFC基于对话框程序,顺序分析

如果是6.0的朋友则首先在菜单上选择新建,在工程(Project)选项卡中选中MFC AppWizard,将工程名(Project name)中起名为Dialog,按确定(OK)。在向导第一步中选...
  • llfsunshine
  • llfsunshine
  • 2014-05-05 09:00:56
  • 1249

MFC单文档之快速创建多个对话框类

快速新建多个对话框类
  • menshu1892
  • menshu1892
  • 2017-04-08 16:36:35
  • 1537

MFC应用程序类型:单文档、多文档与基于对话框

单文档:记事本类程序的标准模式,有菜单栏、工具栏等,只能进行一份文档的操作,即不能同时在同一个应用程序中打开两个文件 多文档:WORD类或浏览器程序的标准模式,可多个窗口显示不同的信息,进行不同的任...
  • shushuidewoniu
  • shushuidewoniu
  • 2013-03-03 21:48:53
  • 4402

mfc基于对话框计算器程序

计算器程序有一个难点便是用户不同的使用习惯,这也是我们开始写程序之前需要想清楚的。 举个例子: 4+3-1=?...
  • qq_36009116
  • qq_36009116
  • 2016-12-01 03:46:22
  • 7781
收藏助手
不良信息举报
您举报文章:FTP基于MFC对话框的建立
举报原因:
原因补充:

(最多只允许输入30个字)