ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

项目代码行数统计/软著源代码3000行代码生成

2019-04-11 16:49:18  阅读:401  来源: 互联网

标签:代码生成 end string start 3000 tempFileTypes fileinfo 源代码 size


#include <io.h>
#include <string>
#include <vector>
#include <fstream>
#include <iostream>

using namespace std;

void split(const string& str, const string& sp, vector<string>& vec)
{
	size_t size = sp.size();

	vec.clear();
	size_t end = 0, start = 0;
	while (start != string::npos && start < str.size())
	{
		end = str.find(sp, start);
		vec.push_back(str.substr(start, end - start));
		start = end == string::npos ? end : end + size;
	}

	if (vec.empty())
		vec.push_back(str);
}


void GetSpecialFilesFromDirectory(string path, string fileType, vector<string>& files)
{
	vector<string> tempFileTypes;
	split(fileType, " ", tempFileTypes);
	if (tempFileTypes.size() == 0)
		return;

	for (int i=0;i<tempFileTypes.size();++i)
	{
		// 文件句柄
		long hFile = 0;
		// 文件信息
		struct _finddata_t fileinfo;

		string p;

		if ((hFile = _findfirst(p.assign(path).append("\\*" + tempFileTypes[i]).c_str(), &fileinfo)) != -1) {
			do
			{
				// 第一种:保存文件的全路径
				files.push_back(p.assign(path).append("\\").append(fileinfo.name));
				//第二种:不保存文件的全路径
				//files.push_back(fileinfo.name);
			} while (_findnext(hFile, &fileinfo) == 0); //寻找下一个,成功返回0,否则-1

			_findclose(hFile);
		}
	}
}

void GetAllFilesIncludeSubfolder(string path,string fileType,vector<string>& files) 
{
	vector<string> tempFileTypes;
	split(fileType, " ", tempFileTypes);
	if (tempFileTypes.size() == 0)
		return;
	//文件句柄
	long hFile = 0;
	//文件信息
	struct _finddata_t fileinfo;
	string p;
	if ((hFile = _findfirst(p.assign(path).append("\\*").c_str(), &fileinfo)) != -1)
	{
		do
		{
			if ((fileinfo.attrib & _A_SUBDIR)) 
			{ //比较文件类型是否是文件夹
				if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0) 
				{
					string subForld = p.assign(path).append("\\").append(fileinfo.name);
					//递归搜索
					GetSpecialFilesFromDirectory(subForld, fileType, files);
					GetAllFilesIncludeSubfolder(p.assign(path).append("\\").append(fileinfo.name),fileType, files);
				}
			}
			else 
			{
				for (int i=0;i<tempFileTypes.size();++i)
				{
					string fileName = fileinfo.name;
					if (fileName.find(tempFileTypes[i]) != std::string::npos)
					{
						// 第一种:保存文件的全路径
						files.push_back(p.assign(path).append("\\").append(fileinfo.name));
						//第二种:不保存文件的全路径
						//files.push_back(fileinfo.name);
					}
					else
					{
						continue;
					}
				}
			}
		} while (_findnext(hFile, &fileinfo) == 0); //寻找下一个,成功返回0,否则-1
		_findclose(hFile);
	}
}

std::string GetFileContent(const std::string& filepath)
{
	std::ifstream infile;
	infile.open(filepath);
	std::string fileContent = "";
	if (infile.is_open())
	{
		std::string tempString;
		while (getline(infile, tempString))
		{
			fileContent += tempString;
		}
		infile.close();
	}
	else
	{
		std::cout << "Fail to open the config file:" << filepath << std::endl;
	}
	return fileContent;
}

int main()
{
	int codeLineCount = 0;
	vector<string> m_Files;
	string path = "E:\\test\\src";
	GetAllFilesIncludeSubfolder(path, ".h .cpp", m_Files);//这里以空格分割文件后缀名

	ofstream outputFile;
	outputFile.open("C:\\Users\\Administrator\\Desktop\\CodeContent.txt",ios::out);

	for (int i=0;i<m_Files.size();++i)
	{
		std::ifstream infile;
		infile.open(m_Files[i]);
		if (infile.is_open())
		{
			std::string tempString;
			while (getline(infile, tempString))
			{
				//软著只需要3000行代码
				/*if (codeLineCount > 3000)
				{
					break;
				}*/

				if(tempString.find("//")!= string::npos || tempString.find("/*") != string::npos)
				{
					cout << "注释" << endl;
					continue;
				}
				else if(tempString.length() == 0)
				{
					cout << "空行" << endl;
					continue;
				}
				else
				{
					outputFile << tempString << endl;
					codeLineCount++;
				}
			}
			infile.close();
		}
		else
		{
			std::cout << "Fail to open the config file:" << m_Files[i] << std::endl;
		}
	}

	outputFile.flush();
	outputFile.close();

	cout << "项目代码总行数 = " << codeLineCount << endl;

	return 0;
}

标签:代码生成,end,string,start,3000,tempFileTypes,fileinfo,源代码,size
来源: https://blog.csdn.net/HW140701/article/details/89213980

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有