MFC实现FTP客户机制作

被老师逼疯的一次实验,全靠自学,实验就一次举手机会,对了过(期末占20分呢),学会了感觉还不错呢哈哈(在做的过程中也遇到过一些问题,但都解决了)

需要应用:IIS(FTP网站制作)、visual stadio 2019

第一步:打开Visual stadio,新建项目(c++,MFC应用)->基于对话框

(点击视图->其他窗口->资源视图,在资源视图中选择Dialog,可以到添加控件界面)MFC实现FTP客户机制作_第1张图片第三步:点击视图->工具箱。选择相应的控件,通过右击的属性来改变ID和文字MFC实现FTP客户机制作_第2张图片

第四步:右击按钮控件->系统变量------添加变量(Connect、Update、Download、Quit)

添加完变量之后添加按钮类向导->添加处理程序(使每个按钮的ID与BN_CLICKED对应)

MFC实现FTP客户机制作_第3张图片

第五步:添加OnConnect、OnUpdate、OnDownload、OnDelete四个方法,类型为void

第六步:

MFC实现FTP客户机制作_第4张图片在framework.c文件中添加

#include 
#include 

在XXXDlg.cpp中添加

CInternetSession* m_pInetSession;//MFC提供的会话类实例
CFtpConnection* m_pFtpConnection;//MFC提供的FTP连接类实例
CFtpFileFind* m_pRemoteFile;//MFC提供的远程文件搜索类实例

第七步:在OnClickedConnect()中添加连接FTP的代码,在OnConnect、OnUpdate、OnDownload、OnQuit、UpdateList五个方法中添加相应的代码来实现每个按钮操作。

void CMFCApplication5Dlg::OnClickedConnect()
{
	// TODO: 在此添加控件通知处理程序代码
	CString Address;//声明变量
	GetDlgItemText(ID_EDIT, Address);//获得输入框所输入的地址 赋值给Address
	OnConnect( Address);//把IP地址赋值调用OnConnect函数 
	this->UpdateList();//更新listbox列表

}


void CMFCApplication5Dlg::OnClickedDownload()
{
	// TODO: 在此添加控件通知处理程序代码
	this->OnDownload();
	this->UpdateList();
}


void CMFCApplication5Dlg::OnClickedQuit()
{
	// TODO: 在此添加控件通知处理程序代码
	this->OnQuit();
	this->UpdateList();
}


void CMFCApplication5Dlg::OnClickedUpdate()
{
	// TODO: 在此添加控件通知处理程序代码
	this->OnUpdate();
	this->UpdateList();
}


void CMFCApplication5Dlg::OnConnect(CString m_IPaddress)
{
	// TODO: 在此处添加实现代码.
	S = new CInternetSession(AfxGetAppName(), 1, PRE_CONFIG_INTERNET_ACCESS);
	//连接到一个FTP服务器,创建并返回指向CFTPConnection对象的指针
	C = S->GetFtpConnection(m_IPaddress);
	//用于客户端来查找特定文件
	R = new CFtpFileFind(C);
}


void CMFCApplication5Dlg::OnDownload()
{
	// TODO: 在此处添加实现代码.
	CString selfile;
	ListBox.GetText(ListBox.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;
			C->GetCurrentDirectory(strdir);
			C->GetFile(selfile, strname);//下载文件到的本地位置
			S->Close();
			this->OnClickedConnect();
			C->SetCurrentDirectory(strdir);
			this->UpdateList();
			AfxMessageBox(_T("下载成功!"));
		}
	}
}


void CMFCApplication5Dlg::OnUpdate()
{
	// 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();
	}

	CString strdir;
	C->GetCurrentDirectory(strdir);
	//上传文件
	BOOL bput = C->PutFile((LPCTSTR)str, (LPCTSTR)strname);
	if (bput)
	{
		S->Close();//关闭会话
		this->OnClickedConnect();//重新连接保持持续会话
		C->SetCurrentDirectory(strdir);
		this->UpdateList();//更新目录列表
		AfxMessageBox(_T("上传成功!"));
	}

}


void CMFCApplication5Dlg::OnQuit()
{
	// TODO: 在此处添加实现代码.
	UINT i;
	i = MessageBox(TEXT("确认要退出程序吗?"), TEXT("温馨提示"), MB_YESNO | MB_ICONQUESTION);
	if (i == IDNO)
	{
		return;
	}
	CDialogEx::OnOK();
}


void CMFCApplication5Dlg::UpdateList()
{
	// TODO: 在此处添加实现代码.
	ListBox.ResetContent();//自己声明的列表的变量名
	//创建一个CFtpFileFind实例
	CFtpFileFind ftpfind(C);//建立连接的实例
	CString strdirpath;
	C->GetCurrentDirectory(strdirpath);
	//找到第一个文件或者文件夹
	BOOL bfind = ftpfind.FindFile(strdirpath);
	while (bfind)
	{
		bfind = ftpfind.FindNextFile();
		CString strpath;
		if (ftpfind.IsDots())
			continue;
		if (!ftpfind.IsDirectory())  //判断是目录还是文件
		{
			strpath = ftpfind.GetFileName(); //文件则读取文件名
			ListBox.AddString(strpath);
		}
		else
		{
			strpath = ftpfind.GetFilePath();
			ListBox.AddString(strpath);
		}
	}
}

最后添加FTP站点,将IP地址放入输入框中,可以实现所有功能。

MFC实现FTP客户机制作_第5张图片

核心源码都在上面了,自己做的话应该就不会需要下面的源码了。

源码: MFC实现FTP客户机制作(计算机网络)-网络基础文档类资源-CSDN文库https://download.csdn.net/download/qq_60203955/85391439?spm=1001.2014.3001.5503

你可能感兴趣的:(visual,studio,windows,c++)