今天在接到一个项目的时候 要用到这两个功能,于是面向百度编程,辛辛苦苦找了两个小时左右,
在一个不知道什么的地方找到了方法,特在此分享记录上来
这是删除文件及文件夹的
DirName:表示文件夹目录
bRemoveRootDir:表示是否全部删除,根目录也不留下
运用递归循环的方式,一直遍历
BOOL DeleteDirectory(CString DirName, BOOL bRemoveRootDir)
{
CFileFind tempFind;
CString csZRootDir;
csZRootDir.Format(L"%s\\*.*", DirName.GetBuffer(0));
BOOL IsFinded = (BOOL)tempFind.FindFile(csZRootDir.GetBuffer(0));
while (IsFinded)
{
IsFinded = (BOOL)tempFind.FindNextFile();
if (!tempFind.IsDots())
{
CString csFileName;
csFileName.Format(L"%s", tempFind.GetFileName().GetBuffer(0));
if (tempFind.IsDirectory())
{
CString tmp;
tmp.Format(L"%s\\%s", DirName.GetBuffer(0), csFileName.GetBuffer(0));
DeleteDirectory(tmp, TRUE);
}
else
{
CString tmp;
tmp.Format(L"%s\\%s", DirName, csFileName.GetBuffer(0));
DeleteFile(tmp.GetBuffer(0));
}
}
}
tempFind.Close();
if (bRemoveRootDir)
{
if (!RemoveDirectory(DirName))
{
//LogRecord(TRUE, _T("remove directory failed! %s \r\n"), DirName);
return FALSE;
}
}
return TRUE;
文件夹复制操作
Source:表示原路径
target:表示新路径
BOOL CopyDirectory(CString source, CString target)
{
CreateDirectory(target, NULL); //获取目标拷贝的路径 拷贝至哪里
CFileFind finder;
CString path = source + _T("\\*.*"); //需要拷贝的文件的路径
// AfxMessageBox(path); //调试用
bool bWorking = finder.FindFile(path); //是否找到了需要拷贝的文件的路径
while (bWorking){
bWorking = finder.FindNextFile();
//AfxMessageBox(finder.GetFileName()); //调试用
if (finder.IsDirectory() && !finder.IsDots()){ //是不是有效的文件夹
CopyDirectory(finder.GetFilePath(), target + _T("\\") + finder.GetFileName()); //递归查找文件夹
}
else{ //是文件则直接复制
CopyFile(finder.GetFilePath(), target + _T("\\") + finder.GetFileName(), FALSE); //拷贝文件夹下的所有文件
}
}
return TRUE;
}
亲测可用 Unicode环境下 多字节集环境下自己测试一下