2012-02-16 20:38:23|?次阅读|上传:wustguangh【已有?条评论】发表评论
关键词:C/C++, 文件操作|来源:唯设编程网
VC/C++编程时,经常需要进行文件和目录进行操作,比如文件/目录拷贝、文件/目录移动、文件/目录删除等,常用的方式包括调用API函数和向操作系统发送批处理命令,本文将各种文件操作方法进行归纳总结,以便于根据项目实际需要查阅。
方案一:调用VC/C++的API函数
进行文件/目录操作时,SHFileOperation的各种函数经常被使用,首先总结一下SHFileOperation的用法:
//删除文件或者文件夹 bool DeleteFile(char * lpszPath) { SHFILEOPSTRUCT FileOp={0}; FileOp.fFlags = FOF_ALLOWUNDO | //允许放回回收站 FOF_NOCONFIRMATION; //不出现确认对话框 FileOp.pFrom = lpszPath; FileOp.pTo = NULL; //一定要是NULL FileOp.wFunc = FO_DELETE; //删除操作 return SHFileOperation(&FileOp) == 0; } //复制文件或文件夹 bool CopyFile(char *pTo,char *pFrom) { SHFILEOPSTRUCT FileOp={0}; FileOp.fFlags = FOF_NOCONFIRMATION| //不出现确认对话框 FOF_NOCONFIRMMKDIR ; //需要时直接创建一个文件夹,不需用户确定 FileOp.pFrom = pFrom; FileOp.pTo = pTo; FileOp.wFunc = FO_COPY; return SHFileOperation(&FileOp) == 0; } //移动文件或文件夹 bool MoveFile(char *pTo,char *pFrom) { SHFILEOPSTRUCT FileOp={0}; FileOp.fFlags = FOF_NOCONFIRMATION| //不出现确认对话框 FOF_NOCONFIRMMKDIR ; //需要时直接创建一个文件夹,不需用户确定 FileOp.pFrom = pFrom; FileOp.pTo = pTo; FileOp.wFunc = FO_MOVE; return SHFileOperation(&FileOp) == 0; } //重命名文件或文件夹 bool ReNameFile(char *pTo,char *pFrom) { SHFILEOPSTRUCT FileOp={0}; FileOp.fFlags = FOF_NOCONFIRMATION; //不出现确认对话框 FileOp.pFrom = pFrom; FileOp.pTo = pTo; FileOp.wFunc = FO_RENAME; return SHFileOperation(&FileOp) == 0; }
应用举例:
//删除一个文件夹 DeleteFile("d:PID "); //删除多个文件 DeleteFile("d:PID.dsp d:PID.dsw "); //把"临时程序"文件夹放到d盘下面 CopyFile("d: ","D:MyProjects临时程序 "); //把PID.dsp和PID.dsw俩个文件放到d盘下面 CopyFile("d: ","D:MyProjects临时程序临时程序PID.dsw "); //把PID文件夹从命名为NewName ReNameFile("d:NewName","d:PID ");
注意:,如果你想把"D:MyProjects临时程序 "的文件夹复制到D盘下,并从命名为NewName,应该这样
//把"临时程序"文件夹复制到d盘下并从命名为"NewName" CopyFile("d:NewName ","D:MyProjects临时程序*.* ");
文件操作基本上可以直接调用SHFileOperation提供的各种函数,下面主要总结一下VC/C++编程时目录的拷贝、删除操作,目录的移动可以先拷贝,在删除源目录,在此不再赘述。
1、目录拷贝
1.1、在MFC环境中使用
///////////////////////////////// //MFC版 目录拷贝 ///////////////////////////////// void FileCopyTo(CString source, CString destination, CString searchStr, BOOL cover = TRUE) { CString strSourcePath = source; CString strDesPath = destination; CString strFileName = searchStr; CFileFind filefinder; CString strSearchPath = strSourcePath + "" + strFileName; CString filename; BOOL bfind = filefinder.FindFile(strSearchPath); CString SourcePath, DisPath; while (bfind) { bfind = filefinder.FindNextFile(); filename = filefinder.GetFileName(); SourcePath = strSourcePath + "" + filename; DisPath = strDesPath + "" + filename; CopyFile((LPCSTR)SourcePath, (LPCSTR)DisPath, cover); } filefinder.Close(); }