C++ 遍历目录下文件(4)

//从CBrowseDir派生出的子类,用来统计目录中的文件及子目录个数
class CStatDir:public CBrowseDir
{
protected:
 int m_nFileCount;  //保存文件个数
 int m_nSubdirCount; //保存子目录个数

public:
 //缺省构造器
 CStatDir()
 {
  //初始化数据成员m_nFileCount和m_nSubdirCount
  m_nFileCount=m_nSubdirCount=0;
 }

//返回文件个数
 int GetFileCount()
 {
  return m_nFileCount;
 }

//返回子目录个数
 int GetSubdirCount()
 {
  //因为进入初始目录时,也会调用函数ProcessDir,
  //所以减1后才是真正的子目录个数。
  return m_nSubdirCount-1;
 }

protected:
 //覆写虚函数ProcessFile,每调用一次,文件个数加1
 virtual bool ProcessFile(const char *filename)
 {
  m_nFileCount++;
  return CBrowseDir::ProcessFile(filename);
 }

//覆写虚函数ProcessDir,每调用一次,子目录个数加1
 virtual void ProcessDir
  (const char *currentdir,const char *parentdir)
 {
  m_nSubdirCount++;
  CBrowseDir::ProcessDir(currentdir,parentdir);
 }
};

void main()
{
 //获取目录名
 char buf[256];
 printf("请输入要统计的目录名:");
 gets(buf);

//构造类对象
 CStatDir statdir;

//设置要遍历的目录
 if (!statdir.SetInitDir(buf))
 {
  puts("目录不存在。");
  return;
 }

//开始遍历

vector<string>file_vec = statdir.BeginBrowseFilenames("*.*");
 for(vector<string>::const_iterator it = file_vec.begin(); it < file_vec.end(); ++it)
  std::cout<<*it<<std::endl;
 
 printf("文件总数: %d\n",file_vec.size());
 system("pause");
}

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/49cd7e4ebeb471bf8f6b8306e4c6d072.html