一、创建一文件txt
UpdateData(FALSE);
表示更新控件变量-》控件上
UpdateData(TRUE);
表示更新控件-》控件变量上
如下图所示:
这里将CEditControl设置成CString m_Name类型变量,在创建按钮下创建消息处理函数,代码如下:
void CcjFileDlg::OnBnClickedButton1() { // TODO: 在此添加控件通知处理程序代码 UpdateData(TRUE); TCHAR szFilter[] = _T("ALL Files(*.TXT)|*.TXT||"); CFileDialog dlg(FALSE, NULL, m_Name, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, szFilter, AfxGetMainWnd()); if(dlg.DoModal() == IDOK) { CString m_path = dlg.GetPathName(); if (m_path.Right(4) != ".TXT" && m_path.Right(4) != ".txt") { m_path += ".TXT"; } CFile file; file.Open(m_path, CFile::modeCreate); file.Close(); MessageBox(_T("完成创建")); } UpdateData(FALSE); }
二、复制文件
两个EDIT CONTROL控件绑定在CString变量下,同时对选择源文件和目标文件夹建立消息处理函数
void Ccopy_mfcDlg::OnBnClickedButton1() { // TODO: 在此添加控件通知处理程序代码 TCHAR szText[] = "ALL Files(*.*)|*.*||"; CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, szText, AfxGetMainWnd()); if (dlg.DoModal() == IDOK) { m_oFile = dlg.GetPathName(); m_FileExt = dlg.GetFileExt(); UpdateData(FALSE); } } void Ccopy_mfcDlg::OnBnClickedButton2() { // TODO: 在此添加控件通知处理程序代码 CFileDialog dlg(FALSE, NULL, NULL, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, _T("All Files(*.*)|*.*||"), AfxGetMainWnd()); CString strText = "."; strText += m_FileExt; if (dlg.DoModal() == IDOK) { m_nFile = dlg.GetPathName(); if (m_nFile.Right(4) != strText) { m_nFile += strText; } UpdateData(FALSE); } }在复制中调用CopyFile来实现复制功能
代码如下:
void Ccopy_mfcDlg::OnBnClickedButton3() { // TODO: 在此添加控件通知处理程序代码 UpdateData(); BOOL ret = CopyFile(m_oFile, m_nFile, TRUE); if (ret) { MessageBox(_T("复制成功"), _T("提示"), MB_OK); } else { MessageBox(_T("复制失败"), _T("提示"), MB_OK); } }
EC控件绑定在CString控件变量
两个按钮消息响应函数为:
void CdeletecxDlg::OnBnClickedButton1() { // TODO: 在此添加控件通知处理程序代码 CFileDialog dlg(TRUE, NULL, NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,_T("All Files(*.*)|*.*||"), this); if (dlg.DoModal() == IDOK) { m_Path = dlg.GetPathName(); UpdateData(FALSE); } } void CdeletecxDlg::OnBnClickedButton2() { // TODO: 在此添加控件通知处理程序代码 UpdateData(); BOOL ret = DeleteFile(m_Path); if (ret) { MessageBox(_T("删除成功"),_T("提示"), MB_OK); } else { MessageBox(_T("删除失败"),_T("提示"), MB_OK); } }
四、重命名
EDITCONTRL绑定变量CString,分别为m_Path,m_Name.
代码如下:
void Crename1Dlg::OnBnClickedButton1() { // TODO: 在此添加控件通知处理程序代码 CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, _T("FILE(*.*)|*.*|"), NULL); if (dlg.DoModal() == IDOK) { CString pathname = dlg.GetPathName(); m_Path.SetWindowText(pathname); m_FileName = dlg.GetFileName(); } } void Crename1Dlg::OnBnClickedButton2() { // TODO: 在此添加控件通知处理程序代码 CString name, path, newpath; m_Path.GetWindowText(path); m_Name.GetWindowText(name); newpath = path; newpath.Replace(m_FileName, name); _trename(path, newpath); MessageBox(_T("完成")); }
列表为ListC控件,在view中选择list表示,且绑定CListCtrl m_filelist;变量。
二个消息处理函数如下:
void CrenameAllDlg::OnBnClickedButton1() { // TODO: 在此添加控件通知处理程序代码 CFileDialog dlg(TRUE,_T("FILE"), _T("*.*"), OFN_OVERWRITEPROMPT|OFN_HIDEREADONLY, _T("FILE(*.*)|*.*|jpeg(*.jpg)|*.jpg|文本(*.txt)|*.txt||"),NULL); if (dlg.DoModal() == IDOK) { POSITION pos = dlg.GetStartPosition(); while(pos != NULL) { CString pathname = dlg.GetNextPathName(pos); m_filelist.InsertItem(m_filelist.GetItemCount(), pathname); } } } void CrenameAllDlg::OnBnClickedButton2() { // TODO: 在此添加控件通知处理程序代码 CString strname, strtemp, nametemp, strext, oldname; GetDlgItem(IDC_EDNAME)->GetWindowText(strname); if(strname.IsEmpty())return; int cout = m_filelist.GetItemCount(); for (int i = 0; i < cout; i++) { nametemp = m_filelist.GetItemText(i,0); strtemp = m_filelist.GetItemText(i,0); oldname = m_filelist.GetItemText(i,0); if(strtemp.Right(4).GetAt(0) == '.') strext = strtemp.Right(3); else { if(strtemp.Right(2).GetAt(0) == '.') strext = strtemp.Right(1); else strext = ""; } int pos = nametemp.Find(_T("\\")); while (pos > 0) { nametemp = nametemp.Right(nametemp.GetLength() - 1 - pos); pos = nametemp.Find(_T("\\")); } strtemp = strtemp.Left(strtemp.GetLength() - nametemp.GetLength()); CString temp; temp.Format(_T("%s%s%d.%s"),strtemp,strname,i,strext); //前缀,重命名,i,扩展名 _trename(oldname,temp); } MessageBox(_T("批量重命名成功")); }
这里第一个消息处理函数是一个个添加上去,我们这里稍作修改一次就全部添加,代码如下:
void CrenameAllDlg::OnBnClickedButton1() { // TODO: 在此添加控件通知处理程序代码 CString strDir; //存选择的该目录 CString strPathTemp; //存文件夹地址 CFileFind Finder; TCHAR szPath[_MAX_PATH];//保存路径变量 BROWSEINFO bi; bi.hwndOwner = NULL; bi.pidlRoot = NULL; bi.lpszTitle = _T("选择一个文件夹"); bi.pszDisplayName = szPath; bi.ulFlags = BIF_RETURNONLYFSDIRS; bi.lpfn = NULL; bi.lParam = NULL; LPITEMIDLIST pItemlDList = SHBrowseForFolder(&bi); //显示一个对话框,让用户选择一个文件夹 if (pItemlDList) { if (SHGetPathFromIDList(pItemlDList, szPath)) { strDir = szPath; } } else { strDir = ""; } if (strDir.Right(1) != "\\") { strDir += "\\"; } strPathTemp = strDir; strDir += "*.*"; bool bf = Finder.FindFile(strDir); while (bf) { bf = Finder.FindNextFile(); CString DataFile = Finder.GetFilePath(); if (Finder.IsDirectory()&&Finder.IsDots()) //如果是目录的话,跳过 continue; CString PathName = strPathTemp + Finder.GetFileName(); m_filelist.InsertItem(m_filelist.GetItemCount(), PathName); } }
六、提取文件夹下所有文件名
listBox控件并绑定了CListBox m_list变量,二个消息处理函数如下:
void CwenjianjiaxinxitiquDlg::OnBnClickedButton1() { // TODO: 在此添加控件通知处理程序代码 CString ReturnPach; // TCHAR szPath[_MAX_PATH];//保存路径变量 BROWSEINFO bi; bi.hwndOwner = NULL; bi.pidlRoot = NULL; bi.lpszTitle = _T("选择一个文件夹"); bi.pszDisplayName = szPath; bi.ulFlags = BIF_RETURNONLYFSDIRS; bi.lpfn = NULL; bi.lParam = NULL; LPITEMIDLIST pItemlDList = SHBrowseForFolder(&bi); //显示一个对话框,让用户选择一个文件夹 if (pItemlDList) { if (SHGetPathFromIDList(pItemlDList, szPath)) { ReturnPach = szPath; } } else { ReturnPach = ""; } Path = ReturnPach; } void CwenjianjiaxinxitiquDlg::OnBnClickedButton2() { // TODO: 在此添加控件通知处理程序代码 m_list.ResetContent(); CFileFind file; if(Path.Right(1) != "\\") Path += "\\*.*"; else Path += "*.*"; BOOL bf; bf = file.FindFile(Path); //开始遍历文件夹下有没有文件或文件夹 int i = 1; while(bf) //bf为1,表示仍有nextFile { bf = file.FindNextFile(); if (!file.IsDots()) //如果文件为"."或者"..",则为真,表示其为一目录 { CString str; str.Format(_T("%d"), i); strName = file.GetFileName(); m_list.AddString(strName); i++; } } }
注:
if(finder.IsDirectory() && !finder.IsDots()) //如果是目录
IsDirectory()判断是否目录
IsDots()) 判断目录是否为“.”或".."
在dos中每个目录下都有缺省的两个目录分别为"."和".."分别表示上一层目录和本层目录.
因此当我们遍历目录树下的文件时要过滤掉这两个缺省目录。
每个文件夹都有下面两个特殊子文件夹:
(1) . 表示本文件夹自己
(2) .. 表示本文件夹的父文件夹
显然,在文件夹遍历的时候,这两个子文件夹需要特殊处理,否则将陷入死循环。
IsDots():就是判断是不是这两个文件夹的一个.