FTP基于MFC对话框实现与服务器文件传输(小白福利,Windows FTP服务搭建,到MFC工程实现文件传输)

一、win10搭建FTP服务

1、在控制面板窗口中,找到“程序”,点击。

FTP基于MFC对话框实现与服务器文件传输(小白福利,Windows FTP服务搭建,到MFC工程实现文件传输)_第1张图片

2.在打开的“程序”窗口中,找到“启用或关闭windows功能”,点击打开,如下图所示:

FTP基于MFC对话框实现与服务器文件传输(小白福利,Windows FTP服务搭建,到MFC工程实现文件传输)_第2张图片

3.在“windows功能”中找到“Internet信息服务”,并选中“FTP服务”、“FTP扩展性”和“IIS管理控制台”前的复选框,点击“确定”,

FTP基于MFC对话框实现与服务器文件传输(小白福利,Windows FTP服务搭建,到MFC工程实现文件传输)_第3张图片

4.系统自动配置成功后,右击我的电脑,选择“管理”,在计算机管理界面选择服务和应用程序中的“Internet信息服务”打开“IIS管理器”

FTP基于MFC对话框实现与服务器文件传输(小白福利,Windows FTP服务搭建,到MFC工程实现文件传输)_第4张图片

5.打开“IIS管理器”后,在左栏的“网站”上点击右键,打开“添加FTP站点”

FTP基于MFC对话框实现与服务器文件传输(小白福利,Windows FTP服务搭建,到MFC工程实现文件传输)_第5张图片

6.然后按照提示填写站点信息

FTP基于MFC对话框实现与服务器文件传输(小白福利,Windows FTP服务搭建,到MFC工程实现文件传输)_第6张图片

7.点击“下一步”,按照下图提示,设置“绑定和SSL设置”,在“IP地址”处,可以用内网IP也可以用外网IP,访客自然也就根据你的IP设定来决定;

FTP基于MFC对话框实现与服务器文件传输(小白福利,Windows FTP服务搭建,到MFC工程实现文件传输)_第7张图片

8.点击“下一步”,设置“身份验证和授权信息”

FTP基于MFC对话框实现与服务器文件传输(小白福利,Windows FTP服务搭建,到MFC工程实现文件传输)_第8张图片

9.设置完以后,点击“完成”,即可在左栏“网站”下看到“多了一个你设置的FTP站点”

FTP基于MFC对话框实现与服务器文件传输(小白福利,Windows FTP服务搭建,到MFC工程实现文件传输)_第9张图片

注意要想启动FTP必须确保你的Microsoft FTP Service服务启动了。

FTP基于MFC对话框实现与服务器文件传输(小白福利,Windows FTP服务搭建,到MFC工程实现文件传输)_第10张图片

10.然后在浏览器地址栏中输入“ftp://填写的IP”测试一下

FTP基于MFC对话框实现与服务器文件传输(小白福利,Windows FTP服务搭建,到MFC工程实现文件传输)_第11张图片

11、要想局域网内的其他电脑也能访问,需要在控制面板中打开系统和安全

FTP基于MFC对话框实现与服务器文件传输(小白福利,Windows FTP服务搭建,到MFC工程实现文件传输)_第12张图片

12、选择允许程序通过Windows防火墙,

FTP基于MFC对话框实现与服务器文件传输(小白福利,Windows FTP服务搭建,到MFC工程实现文件传输)_第13张图片

13、选择“更改设置”,打开其中FTP服务器。

FTP基于MFC对话框实现与服务器文件传输(小白福利,Windows FTP服务搭建,到MFC工程实现文件传输)_第14张图片

14、成功之后最好重启电脑。再去其他局域网的其他电脑上进行测试连接

FTP基于MFC对话框实现与服务器文件传输(小白福利,Windows FTP服务搭建,到MFC工程实现文件传输)_第15张图片

二、新建MFC工程链接数据库实现文件传输

1、新建MFC工程。(这里用的是基于对话框的),MFC界面设计如下

FTP基于MFC对话框实现与服务器文件传输(小白福利,Windows FTP服务搭建,到MFC工程实现文件传输)_第16张图片

2、对每个控件进行修改名字和ID,并添加变量和添加消息响应机制。

FTP基于MFC对话框实现与服务器文件传输(小白福利,Windows FTP服务搭建,到MFC工程实现文件传输)_第17张图片

FTP基于MFC对话框实现与服务器文件传输(小白福利,Windows FTP服务搭建,到MFC工程实现文件传输)_第18张图片

FTP基于MFC对话框实现与服务器文件传输(小白福利,Windows FTP服务搭建,到MFC工程实现文件传输)_第19张图片

FTP基于MFC对话框实现与服务器文件传输(小白福利,Windows FTP服务搭建,到MFC工程实现文件传输)_第20张图片

对每个控件以此添加结果如下

FTP基于MFC对话框实现与服务器文件传输(小白福利,Windows FTP服务搭建,到MFC工程实现文件传输)_第21张图片

3、完善各个控件的代码

头文件中加入以下引用头文件以及下面的变量声明

FTP基于MFC对话框实现与服务器文件传输(小白福利,Windows FTP服务搭建,到MFC工程实现文件传输)_第22张图片

FTP基于MFC对话框实现与服务器文件传输(小白福利,Windows FTP服务搭建,到MFC工程实现文件传输)_第23张图片

代码填入如下

void CFtpClientDlg::OnConnect()//链接
{
	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);
	FileOutside.EnableWindow(TRUE);
	
}




void CFtpClientDlg::OnDisconnect()//断开链接
{
	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 CFtpClientDlg::OnEnterDir()//进入文件夹
{
	CString selfile;
	//获取用户选择的目录名
	FileName.GetText(FileName.GetCurSel(), selfile);
	if (!selfile.IsEmpty())
	{
		pFtpConnection->Close(); //关闭废弃的会话句柄
		this->ConnectFtp(); //重新连接
		pFtpConnection->SetCurrentDirectory(selfile); //改变目录到当前目录
		this->UpdateDir(); //更新目录列表
	}

}



void CFtpClientDlg::OnGoBack()//返回上一级文件
{
	CString strdir;
	pFtpConnection->GetCurrentDirectory(strdir);
	int pos;
	//用字符串截取的方法获得上一级目录
	pos = strdir.ReverseFind('/');
	strdir = strdir.Left(pos);
	pInternetSession->Close(); //关闭废弃会话
	this->ConnectFtp();
	pFtpConnection->SetCurrentDirectory(strdir);
	this->UpdateDir();//更新目录
}


void CFtpClientDlg::OnUpLoad()//上传文件
{
	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 CFtpClientDlg::OnDownload()//下载文件
{
	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 strPath;
			CString strdir;
			strPath = file.GetPathName();
			pFtpConnection->GetCurrentDirectory(strdir);
			pFtpConnection->GetFile(selfile, strPath);//下载文件到的本地位置
			pInternetSession->Close();
			this->ConnectFtp();
			pFtpConnection->SetCurrentDirectory(strdir);
			this->UpdateDir();
			AfxMessageBox(_T("下载成功!"));
		}
	}
}


void CFtpClientDlg::OnDelete()//删除文件
{
	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 CFtpClientDlg::OnNoName()//匿名登录
{
	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 CFtpClientDlg::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("2121"));
		bconnect = true;
	}
	catch (CInternetException* pEx)
	{
		TCHAR szErr[1024];
		pEx->GetErrorMessage(szErr, 1024);
		AfxMessageBox(szErr);
		pEx->Delete();
	}
}

void CFtpClientDlg::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);
		}
	}
}

结果展示

FTP基于MFC对话框实现与服务器文件传输(小白福利,Windows FTP服务搭建,到MFC工程实现文件传输)_第24张图片

FTP基于MFC对话框实现与服务器文件传输(小白福利,Windows FTP服务搭建,到MFC工程实现文件传输)_第25张图片

工程源码下载:https://download.csdn.net/download/weixin_39481659/11069468

你可能感兴趣的:(MFC)