www.pudn.com > ElectronicAlbums.rar > FileFindExt.h


////////////////////////////////////////////////////////////////////// 
////////////////////////////////////////////////////////////////////// 
// FileFindExt.h: interface for the CFileFindExt class. 
/********************************************************************/ 
/*      *--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*              */ 
/*      |           中国科学院计算技术研究所         |              */ 
/*      *--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*              */ 
/*      编程环境: Visual C++ 6.0  (Windows 2000)                    */ 
/*		作    者: 唐 胜 						                    */ 
/*		邮    箱: ts@ict.ac.cn      			                    */ 
/*      发布版本: V1.2.1                                              */ 
/*      发布日期: Nov. 01, 2003     		 	                    */ 
/*      功能说明:搜索同一目录下的所有同类型文件,并进行处理         */ 
/*      版本修改:                                                  */ 
/*                V1.0:Sep. 26, 2002, 递归实现                     */ 
/*                V1.1:Oct. 20, 2003, 为加快搜索速度,减少开销     */ 
/*                      采用先深遍历非递归化实现                    */ 
/*                V1.2:Oct. 21, 2003, 考虑目录的层次结构,采用     */ 
/*                      广度遍历非递归化实现,并直接做成类          */ 
/*                v1.2.1: Nov. 01, 2003 对V1.2进行了优化            */ 
/*      说    明:今后根据需要可增加其它多参数处理函数,或修改处    */ 
/*                理函数, 使用时请保留以上相关信息                  */ 
/********************************************************************/ 
////////////////////////////////////////////////////////////////////// 
////////////////////////////////////////////////////////////////////// 
 
#if !defined(AFX_FILEFINDEXT_H) 
#define AFX_FILEFINDEXT_H 
 
#if _MSC_VER > 1000 
#pragma once 
#endif // _MSC_VER > 1000 
 
//处理函数指针变量类型定义 
 
//typedef BOOL (* PROFUN )(CString SrcFile, CString DstFile=""); 
 
//一个参数型文件处理(不生成其它目标文件)函数指针定义 
typedef BOOL (* PROFUN1 )(CString SrcFile); 
 
//两个参数型文件处理(生成目标文件)函数指针定义 
typedef BOOL (* PROFUN2 )(CString SrcFile, CString DstFile); 
 
 
class CFileFindExt : public CFileFind  //继承CFileFind类 
{ 
protected: 
 
	//成员变量:调用SearchFiles函数后,保存所有文件的 
	//相对路径文件名(相对于起始搜索路径) 
	CStringArray m_FileNames; 
	 
public: 
 
	//构造函数和析构函数 
	CFileFindExt(); 
	virtual ~CFileFindExt(); 
 
	 
	//以下三个函数是成员变量操作函数 
 
	/************************************************************************ 
	功能说明: 设置文件名数组成员变量的大小和内存分配增量 
	参数说明: nNewSizen:当数组的大小;GrowBy:内存分配增量 
	输出说明: 无 
	函数调用: 类CStringArray的SetSize() 
	*************************************************************************/ 
	void SetSize(int nNewSize, int nGrowBy = -1); 
 
	/************************************************************************ 
	功能说明: 获取文件名数组成员变量的大小 
	参数说明: 无 
	输出说明: 返回文件名数组成员变量的大小 
	函数调用: 类CStringArray的GetSize() 
	*************************************************************************/ 
	int GetSize() const; 
	 
	/************************************************************************ 
	功能说明: 获取数组成员变量中的文件名 
	参数说明: nFileIndex: 要获取的文件名在数组中的位置 
	输出说明: 返回文件名 
	函数调用: 类CStringArray的GetAt() 
	*************************************************************************/ 
	CString GetAt(int nFileIndex) const; 
 
 
 
	//以下三个函数是对所有文件进行处理的成员函数 
 
	/************************************************************************ 
	修改日期:2003-10-21 
	修改说明:为加快搜索速度,减少开销,用广度遍历实现非递归化 
	功能说明: 寻找指定目录下、指定扩展名的所有文件 
	调用格式: SearchFiles(DirName, FileExtName) 
	参数说明: DirName: 指定目录名 
			  FileExtName:指定扩展名,缺省为所有类型文件 
	输出说明: 1、所有文件的相对路径文件名(相对于起始搜索路径) 
				 保存在成员变量m_FileNames中; 
			  2、成功返回true,分配内存不足时返回false 
	函数调用: FindFile(),FindNextFile(),GetFilePath() 
	*************************************************************************/ 
	BOOL SearchFiles(CString DirName, CString FileExtName="*.*"); 
	 
 
	/************************************************************************ 
	修改日期:2003-10-21 
	修改说明:为加快搜索速度,减少开销,用广度遍历实现非递归化 
	功能说明: 处理指定目录下、指定扩展名的所有文件 
	调用格式: DoProcess(DirName, process, FileExtName) 
	参数说明: DirName: 指定目录名 
			  process: 一个参数型处理函数批针PROFUN1 
			  FileExtName:指定扩展名,缺省为所有类型文件 
	输出说明: 1、对所有文件处理都成功,则返回true; 
			  2、某一文件处理出错时(返回false),或分配内存不足时, 
				 则终止搜索,返回false 
	函数调用: process(),FindFile(),FindNextFile(),GetFilePath() 
	*************************************************************************/ 
	BOOL DoProcess(CString DirName, PROFUN1 process, CString FileExtName="*.*"); 
 
	/************************************************************************ 
	修改日期:2003-10-21 
	修改说明:为加快搜索速度,减少开销,用广度遍历实现非递归化 
	功能说明: 处理指定目录下、指定扩展名的所有文件 
	调用格式: DoProcess(DirName, process, DstDir, SrcFileExt, DstFileExt) 
	参数说明: DirName: 指定目录名 
			  process: 两个参数型处理函数批针PROFUN2 
			  DstDir:  目标文件存放根目录名 
			  SrcFileExt: 源文件扩展名,缺省为所有类型文件 
			  DstFileExt: 目标文件扩展名,缺省为所有类型文件 
	输出说明: 1、对所有文件处理都成功,则返回true; 
			  2、某一文件处理出错(函数process()返回false),或分配内存不足时, 
				 则终止搜索,返回false 
	函数调用: process(),FindFile(),FindNextFile(),GetFilePath() 
	*************************************************************************/ 
	BOOL DoProcess(CString DirName, PROFUN2 process, CString DstDir, 
		CString SrcFileExt="*.*", CString DstFileExt="*.*"); 
 
	void Free(){m_FileNames.RemoveAll();} 
	 
}; 
 
#endif // !defined(AFX_FILEFINDEXT_H_)