统计文件内容行数

#include "windows.h"
#include "iostream"
#include "fstream"
#include "string"
#include <iosfwd>
#include "time.h"

using namespace std;

long long gFileCnt = 0;
long long gFilesLine = 0;

const char* gFileExName[] = {".cpp",".h",".c"};

bool TestFileType(char* pFileExName)
{
	int nCnt = sizeof(gFileExName)/sizeof(gFileExName[0]);
	for (int i=0; i<nCnt; i++)
	{
		if (!strcmp(pFileExName,gFileExName[i]))
			return true;
	}
	return false;
}

char* GetFlieExName(char* pFileName)
{
	char* pStart = pFileName;
	char* pDotPos = pFileName;
	while( pStart = strstr(pStart,".") )
	{
		pDotPos = pStart;
		pStart++;
	}
	return pDotPos;
}

long CountLine(char* szFileName)
{
	long curFileLine = 0;
	ifstream inFile(szFileName);
	string s;
	while (getline(inFile,s))
	{
		curFileLine++;
	}
	inFile.close();
	return curFileLine;
}

void Traversal(char* szPath)
{
	WIN32_FIND_DATA FindData = {0}; 
	char szPathTmp[200] = {0};
	strcpy(szPathTmp,szPath);
	strcat(szPathTmp,"\\*.*");
	HANDLE  hFindFile = FindFirstFile(szPathTmp,&FindData);
	if (hFindFile == INVALID_HANDLE_VALUE)
	{
		return;
	}
	while(1)
	{
		char FileNameTmp[200] = {0};
		strcpy(FileNameTmp,szPath);
		strcat(FileNameTmp,"\\");
		strcat(FileNameTmp,FindData.cFileName);

		if ( FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )
		{
			if (FindData.cFileName[0] == '.')
			{
				if(!FindNextFile(hFindFile,&FindData))  
					break;  
				continue;
			}
			Traversal(FileNameTmp);
		}
		else
		{
			char* pExName = GetFlieExName(FindData.cFileName);
			if ( TestFileType(pExName) )
			{
				long nLineCnt = CountLine(FileNameTmp);
				cout<<FileNameTmp<<"当前文件行数"<<nLineCnt<<endl;
				gFileCnt++;
				gFilesLine += nLineCnt;
			}
		}
		if(!FindNextFile(hFindFile,&FindData))  
			break;  
	}
	FindClose(hFindFile);
}



int main(int argc, char* argv[])
{
	if (argc != 2)
	{
		cout<<"请将文件夹托至该exe程序\n按任意键结束..."<<endl;
		getchar();
		return 0;
	}
	long nStartMSec = GetTickCount();
	cout<<"输入文件夹路径:"<<argv[1]<<endl;
	Traversal(argv[1]);
	cout<<"总文件行数:"<<gFilesLine<<endl;
	cout<<"总文件数:"<<gFileCnt<<endl;
	long nEndMSec = GetTickCount();
	cout<<"历时:"<<nEndMSec-nStartMSec<<"ms"<<endl;
	getchar();
	return 0;
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值