您的位置:首页 > 其它

一个对磁盘,文件夹,文件进行遍历的类

2006-12-26 15:28 239 查看
 //.h


#pragma once


#include <vector>


//封装一个对磁盘,文件夹,文件进行遍历的类 


class CGetFileOrFolder




...{


protected:


    //记录磁盘的串


    std::vector<CString> m_strDisk;


    //记录文件夹的串 


    std::vector<CString> m_strFolder;


    //记录文件的串 


    std::vector<CString> m_strFile;


private:


    void get_all_disk();


public:


    //磁盘的枚举


    int get_disk_count();


    CString get_one_disk(int nIndex);


    //文件夹的枚举


    bool search_folder_file(CString path);


    int get_folder_count();


    CString get_one_folder(int nIndex);


    //文件的枚举


    int get_file_count();


    CString get_one_file(int nIndex);


public:


    CGetFileOrFolder(void);


    ~CGetFileOrFolder(void);


};


//使用方法


//磁盘:




/**//*


    CGetFileOrFolder g;


    int n = g.get_disk_count();


    for(int i = 0; i < n; i++)


        AfxMessageBox(g.get_one_disk(i));


*/


//文件(文件夹)




/**//*


    CGetFileOrFolder g;


    g.search_folder_file(g.get_one_disk(1));


    for(int i = 0; i < g.get_file_count(); i++)


        AfxMessageBox(g.get_one_file(i));


*/






//.cpp


//遍历磁盘的类 


#include "StdAfx.h"


#include ".getfileorfolder.h"




CGetFileOrFolder::CGetFileOrFolder(void)




...{


}




CGetFileOrFolder::~CGetFileOrFolder(void)




...{


}


void CGetFileOrFolder::get_all_disk()




...{


    CString str;


    char buf[26*4+1];


    DWORD n = GetLogicalDriveStrings(100,buf);


    for(int i = 0; i < (int)n; i+=4)




    ...{


        str.Format("%c%c",buf[i],buf[i+1]);


        this->m_strDisk.push_back(str);


    }


}


int CGetFileOrFolder::get_disk_count()




...{


    if(this->m_strDisk.empty())


        this->get_all_disk();


    return (int)this->m_strDisk.size();


}


CString CGetFileOrFolder::get_one_disk(int nIndex)




...{


    int n = this->get_disk_count();


    if(nIndex >= n)


        return _T("");


    return this->m_strDisk[nIndex];


}


//参数path必须以 / 结束


//找到指定 目录的文件夹,文件,将他们信息存入,map中


bool CGetFileOrFolder::search_folder_file(CString path)




...{


    if(path == _T(""))


        return true;




    CFileFind mysearch;


    int n_eof=mysearch.FindFile((LPCTSTR)(path+"*.*"));


    this->m_strFile.clear();


    this->m_strFolder.clear();






    while(n_eof) ...{


        n_eof = mysearch.FindNextFile();


        // not a directory




        if(!mysearch.IsDirectory()) ...{ 


            this->m_strFile.push_back(mysearch.GetFileName());


        }//if(!mysearch.IsDirectory())




        else ...{


            CString name=mysearch.GetFileTitle();                


            if(!mysearch.IsDots()) 


                this->m_strFolder.push_back(mysearch.GetFileName());        


            }//else if(!mysearch.IsDirectory())


    }//while(!n_eof)


  


    mysearch.Close();


    return true;


}


int CGetFileOrFolder::get_folder_count()




...{


    return (int)this->m_strFolder.size();


}


CString CGetFileOrFolder::get_one_folder(int nIndex)




...{


    int n = this->get_folder_count();


    if(nIndex >= n)


        return _T("");


    return this->m_strFolder[nIndex];


}


int CGetFileOrFolder::get_file_count()




...{


    return (int)this->m_strFile.size();


}


CString CGetFileOrFolder::get_one_file(int nIndex)




...{


    int n = this->get_file_count();


    if(nIndex >= n)


        return _T("");


    return this->m_strFile[nIndex];


}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息