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

 

// .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];
}

相关文章:

判段点是否在多边形内

 

VC中对office的操作

实现树结构的类CTree

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值