📄 fileex.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 + -