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();
}