一系列MFC操作文件实例(中)

来源:互联网 发布:淘宝搜索排名优化 编辑:程序博客网 时间:2024/05/28 04:55

一、获取目标文件属性


将五个EDITCTL分别与五个CString变量绑定,即CString m_Path;CString m_StartTime;CString m_ModTime;CString m_LastTime;CString m_Size;

消息处理函数为:

void CGetStatusDlg::OnBnClickedButton1(){// TODO: 在此添加控件通知处理程序代码CFileDialog dlg(TRUE, NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,_T("All Files(*.TXT)|*.TXT||"),this);if (dlg.DoModal() == IDOK){m_Path = dlg.GetPathName(); //获取文件路径CFile file;file.Open(m_Path, CFile::modeRead); //以读取的方式打开文件CFileStatus flStatus;file.GetStatus(flStatus);file.Close();m_StartTime = flStatus.m_ctime.Format(_T("%Y-%m-%d %H:%M:%S"));m_ModTime   = flStatus.m_mtime.Format(_T("%Y-%m-%d %H:%M:%S"));m_LastTime  = flStatus.m_atime.Format(_T("%Y-%m-%d %H:%M:%S"));m_Size.Format(_T("%dK"), flStatus.m_size/1024);UpdateData(TRUE);}}

二、复制文件显示进度


将控件绑定变量分别为:CString m_oFile;CString m_nFile;CProgressCtrl m_Progress;

选择源文件与目标文件夹消息处理代码如下:

void CjinduDlg::OnBnClickedButslect(){// TODO: 在此添加控件通知处理程序代码CFileDialog dlg(TRUE, NULL, NULL, OFN_OVERWRITEPROMPT|OFN_HIDEREADONLY, _T("All Files(*.*)|*.*||"), this);if (dlg.DoModal() == IDOK){m_oFile = dlg.GetPathName();  //获取文件路径m_FileExt = dlg.GetFileExt(); //获取文件扩展名UpdateData(FALSE);}}void CjinduDlg::OnBnClickedButnewpath(){// TODO: 在此添加控件通知处理程序代码CFileDialog dlg(FALSE, NULL, NULL, OFN_OVERWRITEPROMPT|OFN_HIDEREADONLY, _T("All Files(*.*)|*.*||"), this);CString strText = _T(".");strText += m_FileExt;if (dlg.DoModal() == IDOK){m_nFile = dlg.GetPathName();if (m_nFile.Right(4) != strText){m_nFile += strText;}UpdateData(FALSE);}}


复制按钮的消息处理函数如下:

void CjinduDlg::OnBnClickedButcopy(){// TODO: 在此添加控件通知处理程序代码UpdateData();HGLOBAL hGlobal;CFile* writefile;  //声明文件指针CFile* readfile;long readlen, poslen, filelen;LPVOID pvData;if (m_oFile.IsEmpty()||m_nFile.IsEmpty()){MessageBox(_T("文件夹不能为空"), _T("提示"), MB_OK);return;}readfile = new CFile(m_oFile, CFile::modeRead); //打开源文件HANDLE hfile = ::CreateFile(m_nFile, GENERIC_WRITE|GENERIC_READ, 0, 0, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 0);CloseHandle(hfile);writefile = new CFile(m_nFile, CFile::modeWrite);  //打开目标文件filelen = readfile->GetLength();                  //获取源文件大小ldiv_t r;r = ldiv(filelen, 100);                          //计算比率long pos = r.quot;                               //取整long ipos;ipos = pos;int i = 0;hGlobal = GlobalAlloc(GMEM_MOVEABLE, 512);       //分配内存pvData = GlobalLock(hGlobal);while (1){ZeroMemory(pvData, 512);readlen = readfile->Read(pvData, 512);poslen = readfile->GetPosition();if (poslen > ipos){ipos += pos;i++;}m_Progress.SetPos(i);        //设置进度条m_Progress.Invalidate();     //重绘进度条writefile->Write(pvData, readlen); //向目标文件写入数据if(poslen == filelen)break;}AfxMessageBox(_T("复制完成"));m_Progress.SetPos(0);    GlobalUnlock(hGlobal);readfile->Close();writefile->Close();}




0 0
原创粉丝点击