用CFile拷贝文件。
简介:利用CFileDialog选择源文件和目标文件,用CFile实现从源文件到目标文件的拷贝。程序界面如下所示:
具体实现:
1、利用向导生成一个基于对话框的MFC应用程序名称为CopyFile,去掉Dialog上的所有控件,然后添加两个static控件、两个Edit控件、三个Button控件。
两个Edit控件的ID分别为IDC_EDIT1、IDC_EDIT2,三个button控件的ID分别为IDC_BUTTON1,IDC_BUTTON2,IDC_BUTTON_COPY.其中IDC_BUTTON1用来选择源文件,Button2用来选择目标文件,IDC_Button_COPY执行拷贝。然后为3个Button控件添加Click的消息映射。OK,控件就这些,下面来添加变量和代码。
2、(1)在CopyFileDlg.h中添加变量
CFile m_Source,m_Destine;//用来打开源文件和目标文件
DWORD dwRead;//剩余的字节数
char lpStrFile[50];//文件名称
char sPath[250];//源文件路径
char dPath[250];//目标文件路径
char lpFileEx[5];//文件扩展名,
char szBuffer[1024];//存放读写的文件内容
(2)在CopyFileDlg.cpp中添加代码。
首先添加#include "afxdlgs.h"//包含CFileDialog类
在OnInitDlg函数中添加
// TODO: 在此添加额外的初始化代码
GetDlgItem(IDC_EDIT1)->EnableWindow(false);
GetDlgItem(IDC_EDIT2)->EnableWindow(false);
GetDlgItem(IDC_BUTTON2)->EnableWindow(false);
GetDlgItem(IDC_BUTTON_COPY)->EnableWindow(false);
dwRead = 0;
为OnBnClickedButton1()函数添加如下代码
// TODO: 在此添加控件通知处理程序代码
CFileDialog m_OpenFileDlg(1,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"text file(*.txt)|*.txt|picture file(*.jpg)|*.jpg|All file(*.*)|*.*||");//打开文件对话框
OPENFILENAME &openFile = m_OpenFileDlg.GetOFN();//改变对话框属性,必须在DoModal前修改
openFile.lpstrTitle = "Source File Path";
openFile.lpstrFilter = "All Files(*.*)|(*.*)";
openFile.lpstrInitialDir = "H://";
if(m_OpenFileDlg.DoModal()== IDOK)
{
CString filepath = m_OpenFileDlg.GetPathName();
SetDlgItemText(IDC_EDIT1,filepath);
memset(lpStrFile,0,50);
strcpy(lpStrFile,m_OpenFileDlg.GetFileName());
strcpy(lpFileEx,m_OpenFileDlg.GetFileExt());
memset(sPath,0,250);
strcpy(sPath,m_OpenFileDlg.GetPathName());
GetDlgItem(IDC_BUTTON2)->EnableWindow();
}
为OnBnClickedButton2()函数添加如下代码
CFileDialog m_SaveFileDlg(0,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"text file(*.txt)|*.txt|picture file(*.jpg)|*.jpg|All file(*.*)|*.*||");
OPENFILENAME &openFile = m_SaveFileDlg.GetOFN();
openFile.lpstrTitle = "Dest File Path";
strcpy(openFile.lpstrFile ,lpStrFile);
//strcpy(openFile.lpstrDefExt,lpFileEx);
openFile.lpstrFilter = "All Files(*.*)|(*.*)";
openFile.lpstrInitialDir = "H://";
if(m_SaveFileDlg.DoModal()== IDOK)
{
CString filepath = m_SaveFileDlg.GetPathName();
SetDlgItemText(IDC_EDIT2,filepath);
memset(dPath,0,250);
strcpy(dPath,m_SaveFileDlg.GetPathName());
GetDlgItem(IDC_BUTTON_COPY)->EnableWindow();
}
为OnBnClickedButtonCopy()函数添加如下代码
m_Source.Open(sPath,CFile::modeRead|CFile::shareDenyWrite,0);
m_Destine.Open(dPath,CFile::modeCreate|CFile::modeNoTruncate|CFile::modeWrite|CFile::shareExclusive,0);
do
{
memset(szBuffer,0,1024);
dwRead = m_Source.Read(szBuffer,1024);
m_Destine.Write(szBuffer,dwRead);
}
while(dwRead > 0);
m_Source.Close();
m_Destine.Close();
MessageBox("File Copy Success!");
return;
OK,代码就这些,其实都很简单,呵呵。