C常用类整理(1)--文件遍历
来源:互联网 发布:房屋装饰设计软件 编辑:程序博客网 时间:2024/06/06 04:18
//////////////////////类名CBrowseDir////////////////////////////////////////////////
///////////////////////////////////////////BrowseDir.h文件////////////////////////////////////////////////////////////
#include "stdlib.h"
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);
};
///////////////////////////////////////////////////////BrowseDir.cpp文件/////////////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "stdlib.h"
#include "direct.h"
#include "string.h"
#include "io.h"
#include "browsedir.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
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)
{
}
- C常用类整理(1)--文件遍历
- C常用类整理(2)--文件复制、删除、移动
- 文件常用类的整理
- C下常用文件操作指令的整理
- C 常用函数整理
- linux c文件遍历
- C遍历磁盘文件
- c遍历文件
- linux c 遍历文件
- 文件遍历(C++)
- C语言文件遍历
- c/c++文件遍历
- 常用C函数----文件类
- C 文件读写整理
- C/C++常用trick整理
- <c:forEach 的常用整理
- [C++]常用字符串操作整理
- <c:forEach 的常用整理
- Struts:入门资料
- 线程、并发设计的链接
- 三则黑客的Google搜索技巧
- Cluster文章链接
- .NET里面的Interop太烂了
- C常用类整理(1)--文件遍历
- 有关java script调用web servcie
- 无法关机问题的详解
- 一套工具
- showModalDialog和showModelessDialog使用技巧
- Oracle904InstalOnRedHatAS3
- 网络流量监控器mrtg全攻略
- Web Services是什么?
- 12月26日