统计文件内容行数

来源:互联网 发布:重庆seo外包服务商 编辑:程序博客网 时间:2024/05/29 14:38
#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;} 

0 0