⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fileex.h

📁 Visual C++编写的工程解析器源代码
💻 H
字号:
// FileEx.h: interface for the CFileEx class.
//CFileEx类为类CFile的增强类,相对与CFile类它可以完成如下功能:
//<1>统计文件行数
//<2>读文件中的一行内容(CString)
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_FILEEX_H__FB230E48_9B20_489B_B1BE_D0E4B58BAF75__INCLUDED_)
#define AFX_FILEEX_H__FB230E48_9B20_489B_B1BE_D0E4B58BAF75__INCLUDED_

#define MAX_LINE_SIZE			1024
#define GLOBAL_PASSTR_SPECCHAR	39		//Delphi中单引号ASCII码值
#define GLOBAL_VCSTR_SPECCHAR	34		//C++中双引号ASCII码值

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

class CFileEx : public CFile  
{
public:
	CFileEx();
	virtual ~CFileEx();

	//是否到文件末尾
	BOOL IsEof();
	//从当前位置读到行尾(模仿Delphi中的ReadLn做法)
	CString ReadALine();
	//统计文件行
	long GetFileLines();

protected:
	//根据strFilename来构造无注释的文件路径[!!!暂时不声明为public]
	CString GetNoNotesFilePath(CString strFilename);
};

//定义类内部函数的声明类型[private/public/protected]
typedef enum {CLS_FUNS_PRIVATE = 1, CLS_FUNS_PROTECTED = 2, CLS_FUNS_PUBLIC = 3} _CLASSFUNSTYPE;

//定义函数/过程分类类型
typedef enum {FT_FUNCTION, FT_PROCEDURE} _FTTYPE;

//该结构保存了从类内部过程和函数名及其属性[private/public/protected]
typedef struct _CLASSFUNSSTRUCT
{
	char strFunctionName[64];
	_FTTYPE	ftType;	//对于C类语言只有FT_FUNCTION类型;而对于Delphi则有FT_FUNCTION/FT_PROCEDURE两种类型
	_CLASSFUNSTYPE cfType;

}CLASSFUNSSTRUCT, *LPCLASSFUNSSTRUCT;

//typedef CList<LPCLASSFUNSSTRUCT, LPCLASSFUNSSTRUCT> CClassFunsList;

//该结构保存了从类到文件之间对应关系
typedef struct _CLASSANDFILEREL
{
	char strClassName[256];
	char strFileName[MAX_PATH];
	LPCLASSFUNSSTRUCT cfaClassFunsArray[256];
	int nFuncCounts;	//标志当前类内部函数个数[!!!不能用列表!!!]

}CLASSANDFILEREL, *LPCLASSANDFILEREL;

typedef CList<LPCLASSANDFILEREL, LPCLASSANDFILEREL> CClassInfoList;

/*******************为VC定制文件解析类**********************/
#ifndef _CPARSEVCFILECLASS
#define _CPARSEVCFILECLASS

class CParseVCFile : public CFileEx
{
public:
	CParseVCFile();
	~CParseVCFile();

	//解析.CPP|.H文件(|.RC留作以后扩展使用)[!!!第一个被调用的函数]
	void InitFileList();

	CStringList* GetCppList();
	CStringList* GetHeadList();

	//得到VC[.H/.CPP文件]中所定义的类的名字列表
	//CClassInfoList里的一个Item由[类名|文件名]以及类函数列表组成
	CClassInfoList* GetClassNames(char strVCFilename[MAX_PATH])
	{
		if(ParseVCClass(strVCFilename))
			return &m_cilClassNames;
		else
			return NULL;
	};

protected:
	CString m_strNoNotesFilename;		//去掉注释后的文件名

	//保存CPP/Head/RC文件名列表[m_slstResource留作以后扩展接口]
	CStringList m_slstSource, m_slstHead;//, m_slstResource;

	CClassInfoList m_cilClassNames;		//Class和File对象关系列表

	//移除.H/.CPP文件中的所有注释内容
	BOOL RemoveVCFileNoteInfo(char strVCFilename[MAX_PATH]);

	//解析文件内部类结构,并修改m_cilClassNames列表内容[不采用线程]
	BOOL ParseVCClass(char strVCFilename[MAX_PATH]);
};

inline CStringList* CParseVCFile::GetCppList()
{
	if(!m_slstSource.IsEmpty())
		return &m_slstSource;
	else 
		return NULL;
}

inline CStringList* CParseVCFile::GetHeadList()
{
	if(!m_slstHead.IsEmpty())
		return &m_slstHead;
	else 
		return NULL;
}

#endif; //end define _CPARSEVCFILECLASS

/*******************为Delphi定制文件解析类******************/
#ifndef _CPARSEDELPHIFILECLASS
#define _CPARSEDELPHIFILECLASS

class CParseDelphiFile : public CFileEx
{
public:
	CParseDelphiFile();	
	~CParseDelphiFile();

	//得到Delphi[dpr文件]的uses部分所包含的文件
	CStringList* GetProjFiles()
	{
		if(ParseDelphiProj())
			return &m_sltHeadFiles;
		else
			return NULL;
	};
	
	//得到Delphi[pas文件]中所定义的类的名字列表
	//CClassInfoList里的一个Item由[类名|文件名]以及类函数列表组成
	CClassInfoList* GetClassNames(char strPasFilename[MAX_PATH])
	{
		if(ParseDelphiClass(strPasFilename))
			return &m_cilClassNames;
		else
			return NULL;
	};

protected:	
	CString m_strNoNotesFilename;		//去掉注释后的文件名
	CStringList m_sltHeadFiles;			//uses部分的文件名列表
	CClassInfoList m_cilClassNames;		//Class和File对象关系列表

	//清除Delphi[dpr/pas文件]所有的注释信息,然后把它保存到新文件中去[保持文件后缀名不变]
	//在本应用中由于效率问题,该函数仅针对dpr文件做过滤分析.
	BOOL RemoveProjFileNoteInfo();

	//在本应用中由于效率问题,该函数仅针对pas文件做类过滤分析.
	BOOL RemovePasFileNoteInfo(char strPasFilename[MAX_PATH]);

	//内部方法[解析工程的文件列表]
	BOOL ParseDelphiProj();

	//解析文件内部类结构,并修改m_cilClassNames列表内容[不采用线程]
	BOOL ParseDelphiClass(char strPasFilename[MAX_PATH]);
};

#endif; //end define _CPARSEDELPHIFILECLASS

#endif // !defined(AFX_FILEEX_H__FB230E48_9B20_489B_B1BE_D0E4B58BAF75__INCLUDED_)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -