遍历文件夹下所有的文件名

来源:互联网 发布:matlab修改矩阵元素 编辑:程序博客网 时间:2024/05/22 16:53

源码下载地址:http://download.csdn.net/download/fyssqzh555/6625627


#pragma once#include "BrowseDir.h"class CStatDir :public CBrowseDir{protected:  int m_nFileCount;   //保存文件个数  int m_nSubdirCount; //保存子目录个数 public:  //缺省构造器  CStatDir();//返回文件个数  int GetFileCount();//返回子目录个数  int GetSubdirCount();//覆写虚函数ProcessFile,每调用一次,文件个数加1  virtual bool ProcessFile(const char *filename);//覆写虚函数ProcessDir,每调用一次,子目录个数加1  virtual void ProcessDir(const char *currentdir,const char *parentdir);};  

#include "StdAfx.h"#include "StatDir.h"using namespace std;CStatDir::CStatDir()  {  //初始化数据成员m_nFileCount和m_nSubdirCount  m_nFileCount=m_nSubdirCount=0;  } //返回文件个数  int CStatDir::GetFileCount()  {  return m_nFileCount;  }  //返回子目录个数  int CStatDir::GetSubdirCount()  {  //因为进入初始目录时,也会调用函数ProcessDir,  //所以减1后才是真正的子目录个数。  return m_nSubdirCount-1;  }//覆写虚函数ProcessFile,每调用一次,文件个数加1  bool CStatDir::ProcessFile(const char *filename){  m_nFileCount++;return CBrowseDir::ProcessFile(filename);  }  //覆写虚函数ProcessDir,每调用一次,子目录个数加1  void CStatDir::ProcessDir(const char *currentdir,const char *parentdir)  {  m_nSubdirCount++;CBrowseDir::ProcessDir(currentdir,parentdir);  }

#include "stdlib.h"  #include "direct.h"   #include "io.h"  #include "stdio.h"   #include "iostream"    class CBrowseDir  {  protected:      //存放初始目录的绝对路径,以'/'结尾      char m_szInitDir[_MAX_PATH];        public:      //缺省构造器      CBrowseDir();            //设置初始目录为dir,如果返回false,表示目录不可用      bool SetInitDir(const char *dir);            //开始遍历初始目录及其子目录下由filespec指定类型的文件      //filespec可以使用通配符 * ?,不能包含路径。      //如果返回false,表示遍历过程被用户中止      bool BeginBrowse(const char *filespec);        protected:      //遍历目录dir下由filespec指定的文件      //对于子目录,采用迭代的方法      //如果返回false,表示中止遍历文件      bool BrowseDir(const char *dir,const char *filespec);            //函数BrowseDir每找到一个文件,就调用ProcessFile      //并把文件名作为参数传递过去      //如果返回false,表示中止遍历文件      //用户可以覆写该函数,加入自己的处理代码      virtual bool ProcessFile(const char *filename);            //函数BrowseDir每进入一个目录,就调用ProcessDir      //并把正在处理的目录名及上一级目录名作为参数传递过去      //如果正在处理的是初始目录,则parentdir=NULL      //用户可以覆写该函数,加入自己的处理代码      //比如用户可以在这里统计子目录的个数      virtual void ProcessDir(const char *currentdir,const char *parentdir);  }; 

#include "StdAfx.h"#include "BrowseDir.h"using namespace std;CBrowseDir::CBrowseDir()  {  //用当前目录初始化m_szInitDir  getcwd(m_szInitDir,_MAX_PATH);  //如果目录的最后一个字母不是'\',则在最后加上一个'\'  int len=strlen(m_szInitDir);  if (m_szInitDir[len-1] != '\\')  strcat(m_szInitDir,"\\");  }  bool CBrowseDir::SetInitDir(const char *dir)  {  //先把dir转换为绝对路径  if (_fullpath(m_szInitDir,dir,_MAX_PATH) == NULL)  return false;  //判断目录是否存在  if (_chdir(m_szInitDir) != 0)  return false;  //如果目录的最后一个字母不是'\',则在最后加上一个'\'  int len=strlen(m_szInitDir);  if (m_szInitDir[len-1] != '\\')  strcat(m_szInitDir,"\\");  return true;  }  bool CBrowseDir::BeginBrowse(const char *filespec)  {  ProcessDir(m_szInitDir,NULL);  return BrowseDir(m_szInitDir,filespec);  }  bool CBrowseDir::BrowseDir(const char *dir,const char *filespec)  {  _chdir(dir);  //首先查找dir中符合要求的文件  long hFile;  _finddata_t fileinfo;  if ((hFile=_findfirst(filespec,&fileinfo)) != -1)  {  do  {  //检查是不是目录  //如果不是,则进行处理  if (!(fileinfo.attrib & _A_SUBDIR))  {  char filename[_MAX_PATH];  strcpy(filename,dir);  strcat(filename,fileinfo.name);if (!ProcessFile(filename))  return false;  }  } while (_findnext(hFile,&fileinfo) == 0);  _findclose(hFile);  }  //查找dir中的子目录  //因为在处理dir中的文件时,派生类的ProcessFile有可能改变了  //当前目录,因此还要重新设置当前目录为dir。  //执行过_findfirst后,可能系统记录下了相关信息,因此改变目录  //对_findnext没有影响。  _chdir(dir);  if ((hFile=_findfirst("*.*",&fileinfo)) != -1)  {  do  {  //检查是不是目录  //如果是,再检查是不是 .(当前目录) 或 ..(父目录)   //如果不是,进行迭代  if ((fileinfo.attrib & _A_SUBDIR))  {  if (strcmp(fileinfo.name,".") != 0 && strcmp  (fileinfo.name,"..") != 0){  char subdir[_MAX_PATH];  strcpy(subdir,dir);  strcat(subdir,fileinfo.name);  strcat(subdir,"\\");  ProcessDir(subdir,dir);  if (!BrowseDir(subdir,filespec))  return false;  }  }  } while (_findnext(hFile,&fileinfo) == 0);  _findclose(hFile);  }  return true;  }  bool CBrowseDir::ProcessFile(const char *filename)  {  return true;  }  void CBrowseDir::ProcessDir(const char *currentdir,const char *parentdir)  {  }  


0 0