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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值