?? 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 + -