[小工具]代码统计小工具编写

代码小工具是有一定工作经验并且有更高追求的程序的必备技能,今天加班到早晨五六点,到家都七点了,回到家倒头就睡,下午来公司感觉头还有点晕乎,工作的话怕只会产生更多的代码,就想起来写个工程代码统计工具。

效果图

上图是平时积累的小工具,积累我认识也是程序员必备的素养!

主要代码

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;

namespace CSProjectCodeLine
{
    class Program
    {
        static int Main(string[] args)
        {
            int result = 0;
            try
            {
                Console.WriteLine("===============Aladdin Tool================");
                Console.WriteLine("参数:打表配置文件名或打表配置文件所在的目录");
                Console.WriteLine("===========================================");
                if (args.Length == 0)
                {
                    Console.WriteLine("Error:请填写路径参数");
                    Console.ReadKey();
                    result = 1;
                }
                else if (args.Length == 1)
                {
                    DirectoryInfo dirInfo = new DirectoryInfo(args[0]);
                    if (dirInfo == null)
                    {
                        Console.WriteLine("Error:路径有误");
                        Console.ReadKey();
                        result = 1;
                    }
                    else
                    {
                        CodeCounter counter = new CodeCounter();
                        counter.GetProjectResult(dirInfo.FullName);
                        int codenumber = counter.CodeLines;
                        int filenumber = counter.FileNumber;
                        Console.WriteLine("项目中共有cs代码文件" + filenumber + "个");
                        Console.WriteLine("项目中共有代码" + codenumber + "行");
                        Console.ReadKey();
                        result = 0;
                    }
                }
                else
                {
                    Console.WriteLine("Error:参数只支持一个工程路径");
                    Console.ReadKey();
                    result = 1;
                }
            }
            catch (Exception ex)
            {
                Console.ForegroundColor = ((Console.ForegroundColor == ConsoleColor.Red) ? ConsoleColor.Green : ConsoleColor.Red);
                Console.WriteLine(ex.ToString());
                Console.ResetColor();
                result = 1;
            }
            return result;
        }
    }
}
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;

namespace CSProjectCodeLine
{
    class CodeCounter
    {
        private int codeLines;

        /// <summary>
        /// 代码行数
        /// </summary>
        public int CodeLines
        {
            get
            {
                return codeLines;
            }

            set
            {
                codeLines = value;
            }
        }

        private int commentLines;

        /// <summary>
        /// 注释行数
        /// </summary>
        public int CommentLines
        {
            get
            {
                return commentLines;
            }

            set
            {
                commentLines = value;
            }
        }

        private int fileNumber;

        /// <summary>
        /// 文件个数
        /// </summary>
        public int FileNumber
        {
            get
            {
                return fileNumber;
            }

            set
            {
                fileNumber = value;
            }
        }

        public CodeCounter()
        {
            codeLines = 0;
            commentLines = 0;
            fileNumber = 0;
        }

        /// <summary>
        /// 获取整个项目的代码统计情况
        /// </summary>
        /// <param name="folderPath"></param>
        public void GetProjectResult(string folderPath)
        {
            DirectoryInfo folder = new DirectoryInfo(folderPath);
            try
            {
                var folders = folder.GetDirectories();
                for (int i = 0; i < folders.Length; i++)
                {
                    //递归调用 有时候会碰到目录权限问题
                    GetProjectResult(folders[i].FullName);
                }

                var csFiles = folder.GetFiles("*.cs");
                for (int i = 0; i < csFiles.Length; i++)
                {
                    fileNumber++;
                    string fieleName = folderPath + "\\" + csFiles[i].Name;
                    GetCodeFileResult(fieleName);
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }

        /// <summary>
        /// 单个文件代码统计情况
        /// </summary>
        /// <param name="fileName"></param>
        public void GetCodeFileResult(string fileName)
        {
            string line;
            StreamReader sr = new StreamReader(fileName);
            while ((line = sr.ReadLine()) != null)
            {
                codeLines++;
            }
        }
    }
}

批处理

@echo off
Set BatDir=%~dp0
set/p path=请输入你的工程路径:

Set ToolPath=%BatDir%..\CodeCounter\CSProjectCodeLine.exe
call %ToolPath% %path%
echo.=====检查完毕====

使用方法看上面效果图

工程下载

https://gitee.com/dingxiaowei/CodeCounter

时间: 2024-10-29 17:04:02

[小工具]代码统计小工具编写的相关文章

Python实现代码统计工具(终极篇)_python

本文对于先前系列文章中实现的C/Python代码统计工具(CPLineCounter),通过C扩展接口重写核心算法加以优化,并与网上常见的统计工具做对比.实测表明,CPLineCounter在统计精度和性能方面均优于其他同类统计工具.以千万行代码为例评测性能,CPLineCounter在Cpython和Pypy环境下运行时,比国外统计工具cloc1.64分别快14.5倍和29倍,比国内SourceCounter3.4分别快1.8倍和3.6倍. 运行测试环境本文基于Windows系统平台,运行和测

Java正则表达式(三)、代码量统计工具(统计java源文件中注释、代码、空白行数量)

       比如想统计一个Java程序员一天写代码的工作量(如:有效代码多少行.空行多少.注释多少行等),这个小工具也许能做为一个参考的依据.     思路:因为每个java源文件的内容基本包括java语句.空白行.注释三部份组成(不包括注解),所以要统计某个文件这三部份的内容各占多少时,只需写三个匹配这几部份内容的正则表达式即可.然后通过IO流读取文件中的每一行,并根据正则匹配的结果,累加每部份匹配的数量即可.     注释行:单行注释(//).多行注释.文档注释.正则:((//)|(/\\

FeResPost 4.1.0发布 后处理小程序的快速开发工具

FeResPost 是一个用于Nastran或Samcef有限元计算结果的后处理小程序的快速开发工具.该库允许有限元模式.群组和结果的简单操作.通过由编写C++/C++的耗时操作,支持有效的后处理.该库是分布式,用来作为一个COM组件,NET程序集,以及一个http://www.aliyun.com/zixun/aggregation/13430.html">Ruby扩展编译. FeResPost 4.1.0该版本更新了二进制文件. 软件信息:http://www.ferespost.be

小脑袋百度关键词调价工具分享百度推广的步骤

常常有新人问,网站推广需要几个时间,每个时间大约做些啥呢?在此,我大约总结下,我在实习操作中的一些时间的差异.小脑袋百度关键词调价工具分享http://www.aliyun.com/zixun/aggregation/11238.html">百度推广的步骤,期望抛砖引玉与咱们议论. 首先是内部优化时间   咱们常常说"内容为王",这个我非常的认同.一些人 认为,网站推广要乘早,网站做的差不多了,就可以带推着了.这种主意和做法是非常过错的.内部优化时间是指: 网站策划.构

java编写的简单移动方块小游戏代码_java

本文实例讲述了java编写的简单移动方块小游戏代码.分享给大家供大家参考,具体如下: 运行效果截图如下: 第一次用java编写图形化的界面,还是有些青涩..以后继续努力!!具体代码如下: //Little Box Game by AlexYui //Game.java By 1093710210@ HIT import javax.swing.*; import java.awt.event.*; import java.awt.geom.*; import java.awt.*; import

NCC Tools(never code counter tools) V1.0.1发布代码-代码统计工具_hta

界面如下图:把源代码存为(hta)文件,因为hta文件没有状态栏,所以我这里建议大家存为html文件,这样可以在状态栏下看到 NCC扫描的进度,我这里把NCC的maxloop设置为3000,所以文件统计到3000的时候,会自动终止,以防文件夹中文件太多造成运行的负担. 如果大家喜欢这样的代码,就请关注"Never Modules" 主要功能有- 1.可自己选择文件夹,或者单个文件. 2.自己选择文件后缀名进行统计 3.output information输出的数据有: 文件个数, 文件

搜狗搜索推出专业网站流量分析工具搜狗统计

2011年随着网络广告市场规模的迅速增长,网络广告收入达到511.9亿元,首次超过报纸广告453.6亿元的收入总额.在网络广告高速发展的同时,网络广告效果如何系统考量成为广告主最关心的问题. 在一贯以"精准营销"著称的搜索引擎领域,搜狗搜索推出了一款专业网站流量分析工具搜狗统计.搜狗统计通过全程记录并分析每一位用户在企业网站上的行为,帮助企业全面掌握推广效果,企业可据此优化推广方案,以提升搜索营销的投资回报率.不仅如此,在搜狗统计全面的流量分析后,企业可根据访客喜好优化网站建设,提高网

每个程序员需掌握的20个代码命名小贴士_其它综合

代码中到处都需要命名.作为程序员,我们得给类命名,给变量命名,给函数命名,给参数命名,给命名空间命名,等等等等.下面有20条小贴士能帮助你提高你的命名能力. 1.使用能够表达意图的名字 名字得能告诉我们它要做什么,为什么存在,以及是如何工作的.选择能够表达意图的名字,将更有利于我们理解代码. int d; // elapsed time in days int elapsedTimeInDays; int daysSinceCreation; int daysSinceModification;

简易软盘镜像工具的实现及操作系统编写初步

摘要 本文给出了软盘镜像生成工具的实现,并用其把自己编译生成的引导 文件制作成软盘镜像,写入软盘实现一个简单操作系统的引导. 关键词 软盘镜像工具 操作系统引导. 为了深入的了解80X86计算机的内部原理 ,参照别人的程序用汇编写了几个小程序.但生成软盘镜像的工具大都是DOS版 本的,于是就想自己用VC也实现一个,并用把自己的引导程序写入软盘上验证一 下. 1.镜像工具的基本原理 镜像工具读取磁盘上的文件,然后 安装一定的格式生成软盘镜像文件,最后把软盘镜像文以512字节扇区为单位, 写入软盘上