MFC基于对话框的Demo
txt中每行一个23位的卡号。
文件夹中包含以卡号命名的图像文件。(fpt或者bmp文件)
要求遍历文件夹,找到txt中卡号所对应的图像文件,并复制出来。
VC6.0写的。
太懒了,代码以前写过,直接复制就OK。
**.cpp
下边的代码比较常用and改动比较大,备忘一下。
void CRenameFileDlg::OnButton1() {//按钮1 UpdateData(); char buf[MAX_PATH] = {0}; if (select_any(buf)) { m_pathname=buf; UpdateData(FALSE); } } void CRenameFileDlg::OnButton2() {//按钮2 UpdateData(); //生成一个打开对话框 CFileDialog *lpszOpenFile; lpszOpenFile = new CFileDialog (TRUE,"ccd.txt","",OFN_FILEMUSTEXIST |OFN_HIDEREADONLY , "文件类型(*.txt)|*.txt|所有文件(*.*)|*.*|"); if(lpszOpenFile->DoModal() == IDOK )//假如点击对话框确定按钮 { m_pathname2 = lpszOpenFile->GetPathName();//得到打开文件的路径 SetWindowText(m_pathname2);//在窗口标题上显示路径 } UpdateData(FALSE); } void CRenameFileDlg::OnButton3() {//按钮3 UpdateData(); char buf[MAX_PATH] = {0}; if (select_any(buf)) { m_newfilepath=buf; UpdateData(FALSE); } }
void CRenameFileDlg::OnBUTTON2ok() {//按钮4 strtemp=""; UpdateData(); if (m_pathname=="") { MessageBox("请选择路径","提示",MB_OK);return; } h_FileFile(m_pathname); //// theApp.AddtoTxt(strtemp); AfxMessageBox(" 操作已完成!"); }
遍历文件夹并处理的模子函数。
void CRenameFileDlg::h_FileFile(CString path) { CString filePath=path+_T("//*.*");//能遍历所有子文件夹 //CString filePath=path+_T("//*.bmp"); 不能遍历 CFileFind fileFinder; BOOL bFinished = fileFinder.FindFile(filePath); while(bFinished) //每次循环对应一个类别目录 { bFinished = fileFinder.FindNextFile(); if(fileFinder.IsDirectory() && !fileFinder.IsDots()) //若是目录则递归调用此方法 { h_FileFile(fileFinder.GetFilePath()); } else //判断文件名是否在txt中 { //获取路径名 c:\123\456.bmp CString path2=fileFinder.GetFilePath(); //获取文件名 456.bmp CString fileName = fileFinder.GetFileName();////获得不包含路径的 文件名.后缀 CString f_fix,f_fname; f_fix=fileName.Right(4); f_fname=fileName.Left(23); if (f_fix==".bmp") { ///////////////// CStdioFile file; if(!file.Open(m_pathname2,CFile::modeRead)) { MessageBox("can not open file!"); return; } CString strLine,strTemp,strrow; //strLine:txt每行的内容 while(file.ReadString(strLine)) { CString str,p; str= strLine.GetBufferSetLength(strLine.GetLength()); if(strLine!="") { if (f_fname==str.Left(23))// { //可以自己写各种处理函数
strtemp=strtemp+fileFinder.GetFilePath()+"\r\n"; } } } ////////////////////////// } }//end_else }//end while }
我常用的。
复制文件函数 函数原型 BOOL CopyFile(LPCTSTR lpExistingFileName,LPCTSTR lpNewFileName,BOOL bFailIfExists ); CopyFile(源文件,目标文件,FALSE); //FALSE覆盖 CopyFile(c:\123\456.fpt,c:\newfilefolder\678.fpt,FALSE); 移动文件函数声明 BOOL MoveFile( LPCTSTR lpExistingFileName, // file name LPCTSTR lpNewFileName // new file name ); 用例 MoveFile("C:\\File1.txt","C:\\File3.txt"); 函数功能 移动一个存在的文件或者目录(包括子目录) 参数说明 lpExistingFileName 一个存在的文件或者文件夹字符串指针 lpNewFileName 一个还没存在的文件或者文件夹的字符串指针 用法 DeleteFile 方法删除指定文件。 BOOL DeleteFile( LPCSTRlpFileName//要删除的文件名的指针 ); 参数 lpFileName 必选项。要删除文件的路径。 返回值 成功返回非零,失败返回0 更多错误信息使用GetLastError获取。 如果程序尝试删除一个不存在的文件。GetLastError返回ERROR_FILE_NOT_FOUND。如果文件是只读 的,则GetLastError返回ERROR_ACCESS_DENIED //获取路径名 CString path2=fileFinder.GetFilePath(); //AfxMessageBox("path2="+path2); //获取文件名 CString fileName = fileFinder.GetFileName(); CString DelfilePath; int dotPos33=path2.ReverseFind('\\'); DelfilePath=path2.Left(dotPos33)+'\\'; //删除文件 if (fileName.Find("-01.bmp")!=-1) { //AfxMessageBox("匹配删除 "+DelfilePath+fileName); DeleteFile(DelfilePath+fileName); }
---------End---------
CopyFile只能复制文件,不能复制该文件的文件夹,复制文件夹的代码 待验证。(懒,猴年马月 试试)
SHFILEOPSTRUCT sfo;
sfo.hwnd = NULL;
sfo.wFunc = FO_COPY;
sfo.pFrom = "c:\\My_Docs1\0 ";
sfo.pTo = "c:\\My_Docs2\0 ";
sfo.fFlags = FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOCONFIRMMKDIR;
hr = SHFileOperation(&sfo);
-------------
我想把一个文件夹移动到另一个路径,连同文件夹下的所有子文件和子文件夹!例如 f:\a\b 是个文件夹,把整个 b 文件夹移动到 d:\b 。希望能通过一个函数来实现。假如函数为 Movefolder(CString s,CString d),c 和 d 分别保存着原文件夹和目标文件夹的路径。希望高人能给出完整的代码,如果参数不是CString的,能给出转换代码!! BOOL MoveFolder(CString strSrcPath, CString strDestPath) { strSrcPath += _T('\0');//注意这里一定要加_T('\0'),不要写成_T("\0"); SHFILEOPSTRUCT si = {0}; si.hwnd = ::GetDesktopWindow(); si.wFunc = FO_COPY; si.pFrom = strSrcPath; si.pTo = strDestPath; si.fFlags = FOF_NOCONFIRMATION | FOF_NOCONFIRMMKDIR; return 0 == SHFileOperation(&si); } ---------- void myCopyDirectory(CString source, CString target) { CreateDirectory(target,NULL); //创建目标文件夹 //AfxMessageBox("创建文件夹"+target); CFileFind finder; CString path; path.Format("%s/*.*",source); AfxMessageBox(path); bool bWorking = finder.FindFile(path); while(bWorking){ bWorking = finder.FindNextFile(); AfxMessageBox(finder.GetFileName()); if(finder.IsDirectory() && !finder.IsDots()){ //是文件夹 而且 名称不含 . 或 .. myCopyDirectory(finder.GetFilePath(),target+"/"+finder.GetFileName()); //递归创建文件夹+"/"+finder.GetFileName() } else{ //是文件 则直接复制 //AfxMessageBox("复制文件"+finder.GetFilePath());//+finder.GetFileName() CopyFile(finder.GetFilePath(),target+"/"+finder.GetFileName(),FALSE); } } }