65.9K
CodeProject 正在变化。 阅读更多。
Home

代码统计助手

starIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIconemptyStarIcon

1.11/5 (9投票s)

2006年2月26日

2分钟阅读

viewsIcon

21365

downloadIcon

209

一个 C/C++,数据结构和 Win32 API 项目

引言

这个项目是为了让我更深入地理解 C/C++ 和 Win32 API。 我知道这个实现还不够好,但它运行良好。 在这个文件中,将解释该程序的特性。 并给出关于结构和示例的一些描述。 我使用 C 版本来描述这个项目,但正如您所看到的,您可以下载 Cpp 版本。

特性


1) 在命令行/带参数下运行
2) 易于使用。
3) 统计文件类型包括 .txt, .C, .C++, .h, .java。
4) 它可以处理特定文件,或特定目录(包括子目录)。
5) 设置有效的统计文件。

数据结构


本节的目的是描述结构。 包括
结构 LIB,ITEM 和 CMDMSG。 CMDMSG,我将其定义为命令
消息,是一个接受参数和命令类型的消息,用于
CommandExplain (命令解释)。
/*
*结构 ITEM 的定义,用于记录统计信息。
*/
typedef struct ITEM{
char filename[ FILE_NAME_MAX_LEN + 1 ];
char path[ PATH_MAX_LEN + 1 ];
FILE_T type;
long totalLine;
long commentLine;
long bankLine;
long codeLine;
}ITEM, *PITEM;
/*
*结构 LIB 的定义,用于记录 LIB 信息。
*/
typedef struct LIB{
long totalCode; //总行数
long comment; //注释行
long bank; //空行
long code; //代码行
long sizTab; //表格大小
long HeaderNUM; //头文件计数器
long CNUM; //C 源代码文件计数器
long CppNUM; //C++ 源代码文件计数器
long TxtNUM; //txt 文件计数器
long JavaNUM; //java 源代码文件计数器
double result; //结果 = ( 注释 + 空行 ) 除以总代码行数
BOOL fStat; //统计标志
BOOL fModify; //修改标志
TABLE table;
char szLibName[ FILE_NAME_MAX_LEN + PATH_MAX_LEN + 1 ];
}LIB, *PLIB;
/*
*命令消息 (CMDMSG) 及其句柄 (HCMDMSG) 的定义。
*注意: firARG 是指向第一个参数的指针,它可能是一个文件名 / NULL
* secARG 是变量有符号状态 / FILE_T
* pFindArg 是指向查找参数结构的指针
*/
typedef struct CMDMSG{
CMD_T command;
char *firARG;
int secARG;
PFINDARG pFindArg;
} CMDMSG, *HCMDMSG;

一个简单的 API 示例


函数 StatUnderDirHelp 使用 Win32 API,FindFirstFile, FindNextFile 和 FindClose。


static BOOL StatUnderDirHelp(PLIB pLib, char *szDir, char *szType)
{
char szFileName[256];
char szTmpFileName[256];
BOOL flag;
PITEM pItm;
HANDLE hFind;
WIN32_FIND_DATA FindData;

strcpy( szFileName, szDir );
strcat( szFileName, "\\" );
strcat( szFileName, szType );

hFind = FindFirstFile( szFileName, &FindData );
while ( hFind != INVALID_HANDLE_VALUE )
{
strcpy( szTmpFileName, szDir );
strcat( szTmpFileName, "\\" );
strcat( szTmpFileName, FindData.cFileName );
pItm = MakeItem();
strcpy( pItm->filename, FindData.cFileName );
strcpy( pItm->path, szDir );
if ( ( flag = StatFile( pItm, szTmpFileName ) ) == FILE_OPEN_ERR )
{
FindClose( hFind );
FreeItem( pItm );
return FILE_OPEN_ERR;
}
if ( flag != INVAILD_FILE )
{
if ( AddItem( pLib, pItm ) == MEM_EMPTY )
{
FindClose( hFind );
return MEM_EMPTY;
}
}
if ( !FindNextFile( hFind, &FindData ) )
{
break;
}
}
FindClose( hFind );
return SUCCESS;
}

Postscript

如果您有任何意见或发现错误,请联系我。(sense_8@163.com)。

© . All rights reserved.