项目中一小段代码
//------------------------------------------------- // 复制文件 //------------------------------------------------- void CVideoDemoDlg::Copy_file() { TCHAR path[200]; CString strSrcPath; CString strDesPath; //设置要复制的到文件夹路径 strDesPath = "E:\\"; //设置当前工做路径 SetCurrentDirectory("D:\\"); GetCurrentDirectory(200,path); CFileFind finder; BOOL bWorking = finder.FindFile("*.*"); while (bWorking) { bWorking = finder.FindNextFile(); strSrcPath = "D:\\"; CString filename= finder.GetFileName(); //获得文件或文件夹名 if(filename==savanewfilename || filename == "." || filename == ".." || filename == "Recycled" || filename == "System Volume Information") { //对于文件系统提供的文件不fj } else { strSrcPath = strSrcPath + filename; CopyDirectory(strSrcPath,strDesPath); //复制目录 } } }
//------------------------------------------------- // 供Copy_file()使用 //------------------------------------------------- void CVideoDemoDlg::CopyDirectory(CString pTo,CString pFrom) { char buf[1024]; char buf1[1024]; SHFILEOPSTRUCT fo; memset(buf,0,sizeof(buf)); memset(buf1,0,sizeof(buf1)); memset(&fo,0,sizeof(fo)); strcpy(buf,pTo); strcpy(buf1,pFrom); fo.wFunc=FO_COPY; //复制是FO_COPY,删除是FO_DELETE; 移动FO_MOVE fo.pFrom=buf; fo.pTo=buf1; fo.fFlags=FOF_NOERRORUI|FOF_NOCONFIRMMKDIR | FOF_NOCONFIRMATION; SHFileOperation(&fo); } //------------------------------------------------- // 删除文件 //------------------------------------------------- void CVideoDemoDlg::Delete_file() { TCHAR path[200]; SetCurrentDirectory("D:\\"); //设置当前目录 GetCurrentDirectory(200,path); //获得当前目录路径 CFileFind finder; BOOL bWorking = finder.FindFile("*.*"); while (bWorking) { bWorking = finder.FindNextFile(); CString filename= finder.GetFileName(); //获得文件名 if(filename==savanewfilename || filename == "." || filename == ".."|| filename == "Recycled" || filename == "System Volume Information") { //若是是当前在存储的文件夹或根目录或上及目录以及磁盘回收站则不人任何处理 } else { DeleteDirectory(filename); //删除目录 } } } //------------------------------------------------- // 供Delete_file()调用 //------------------------------------------------- BOOL CVideoDemoDlg::DeleteDirectory(LPCTSTR DirName) { CFileFind tempFind; char tempFileFind[200]; sprintf(tempFileFind, "%s\\*.* ",DirName); BOOL IsFinded=(BOOL)tempFind.FindFile(tempFileFind); //判断文件夹 while(IsFinded) { IsFinded=(BOOL)tempFind.FindNextFile(); //寻找下一个目录 if(tempFileFind == str) { //若是等于当前正在存储的文件夹就不进行任保操做 } if(!tempFind.IsDots()) { char foundFileName[200]; strcpy(foundFileName,tempFind.GetFileName().GetBuffer(200)); if(tempFind.IsDirectory()) { char tempDir[200]; sprintf(tempDir, "%s\\%s ",DirName,foundFileName); DeleteDirectory(tempDir); //删除文件夹 } else { char tempFileName[200]; sprintf(tempFileName, "%s\\%s ",DirName,foundFileName); DeleteFile(tempFileName); //删除文件 } } } tempFind.Close(); //当寻找文件的事件结束就结束寻找功能 RemoveDirectory(DirName); //删除这个目录 return TRUE; }
以上代码是用于文件复制和删除,可是其特殊性,是由其需求确认,正在写的当前文件不能复制和删除