文件拷贝

用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,代码就这些,其实都很简单,呵呵。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值