#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;
}
统计文件内容行数
最新推荐文章于 2021-08-12 10:02:42 发布