您的位置:首页 > 其它

遍历磁盘文件的递归和非递归算法

2009-03-21 10:15 127 查看
1.遍历文件的递归算法 /************************************************************************/
/* 获得磁盘 */
/************************************************************************/
char driver[] = "A://";
while(i <= 0xFFFF)
{
if (DriverNum & i)
{
drivertype = GetDriveType(driver);
if (drivertype == DRIVE_FIXED || drivertype == DRIVE_REMOVABLE)
{
BrowseFile(0, driver);
}
}
driver[0] ++;
i = i << 1;
}

void BrowseFile(CString strFile)
{
CFileFind filefind;
CString szDir = strFile;
if (szDir.Right(1) != "//")
{
szDir += "//";
}
szDir += "*.*";
BOOL res = filefind.FindFile(szDir);
while (res)
{
res = filefind.FindNextFile();
if (!filefind.IsDots() && filefind.IsDirectory()) //不是.文件夹而是普通的目录文件夹
{
CString strPath = filefind.GetFilePath();
CString strTitle = filefind.GetFileName();
//存储
BrowseFile(CallNum, strPath); //递归调用
}
else if (!filefind.IsDots() && !filefind.IsDirectory()) //是普通的文件
{
CString strPath = filefind.GetFilePath();
CString strTitle = filefind.GetFileTitle();
int index = strPath.ReverseFind('//');
strTitle = strPath.Right(strPath.GetLength() - index - 1); //得到文件名及后缀
//对文件的处理
}
}
filefind.Close();
}

2.遍历文件的非递归算法

这里我用到了STL中的list来存储遍历过程中的文件夹

#include <list>
using namespace std;

BOOL ScanFile(CString strFile)
{
list<CString> filevector;
filevector.push_back(strFile);
CFileFind filefind;
CString szDir;
while(filevector.size() > 0)
{
szDir = filevector.front();
filevector.pop_front();
if (szDir.Right(1) != "//")
{
szDir += "//";
}
szDir += "*.*";
BOOL res = filefind.FindFile(szDir);
while(res)
{
res = filefind.FindNextFile();
if (!filefind.IsDots() && filefind.IsDirectory()) //不是.文件夹而是普通的目录文件夹
{
CString strPath = filefind.GetFilePath();
filevector.push_back(strPath);
}
else if (!filefind.IsDots() && !filefind.IsDirectory()) //是普通的文件
{
CString strPath = filefind.GetFilePath(); //文件路径
CString strTitle = filefind.GetFileTitle();//得不到文件的后缀
//对文件的处理
}
}
filefind.Close();
}
return TRUE;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: