在平时开发中,时常需要遍历指定文件夹目录下的所有文件,在这里总结一下代码。
下面这段代码就是递归遍历指定目录,把遍历出来文件信息保存到vector向量里面:
bool FileTra(CString &strDir,vector<CString> &file)
{
if (strDir.IsEmpty()) //如果目录是空的,就退出当前遍历
{
return false;
}
CFileFind filefind;
bool bFound = filefind.FindFile(strDir + _T("\\*"), 0);
while (bFound)
{
bFound = filefind.FindNextFile();
if (filefind.GetFileName() =="."|| filefind.GetFileName() =="..") //跳过隐藏文件
continue;
SetFileAttributes(filefind.GetFilePath(), FILE_ATTRIBUTE_NORMAL);
if (filefind.IsDirectory())
{
FileTra(filefind.GetFilePath(),file);
}
else
{
/*获取文件的各种信息*/
//CString m_strFileAbsolutePath;
//tempFile.m_strFileAbsolutePath=filefind.GetFilePath(); //获取文件绝对路径
CString m_strFileName;
tempFile.m_strFileName=filefind.GetFileName(); //获取文件名
file.push_back(m_strFileName);
}
}
}
除了获取信息,也可以做别的操作,如递归遍历删除指定文件夹,这个也是比较常用的,代码如下:
//遍历删除指定目录下所有文件夹以及文件
void DeleteDirectory(CString strDir)
{
if(strDir.IsEmpty())
{
RemoveDirectory(strDir);
return;
}
//首先删除文件及子文件夹
CFileFind ff;
BOOL bFound = ff.FindFile(strDir+ _T("\\*"),0);
while(bFound)
{
bFound = ff.FindNextFile();
if(ff.GetFileName()== _T(".")||ff.GetFileName()== _T(".."))
continue;
//去掉文件(夹)只读等属性
SetFileAttributes(ff.GetFilePath(),FILE_ATTRIBUTE_NORMAL);
if(ff.IsDirectory())
{
//递归删除子文件夹
DeleteDirectory(ff.GetFilePath());
RemoveDirectory(ff.GetFilePath());
}
else
{
DeleteFile(ff.GetFilePath()); //删除文件
}
}
ff.Close();
//如果有需要连这个文件夹都删除,可以把这一句注释去掉
//RemoveDirectory(strDir);
}
总体流程还是没什么变化的,主要就是遍历指定目录,然后做相应操作即可。