代码统计工具(支持C#,VB.NET)

Gemini永久会员 关于前缀树(Trie)的VB.NET实现,基于C#版本进行适配,保持核心逻辑一致,同时符合VB.NET语法规范 将C#的 `Dictionary<char, TrieNode>` 直接转换为VB.NET的 `Dictionary(Of Char, TrieNode)`。- `TryGetValue` 方法在VB.NET中通过 `If Not dict.TryGetValue(key, value)` 实现,需注意参数传递方式。- VB.NET中使用 `IsNothing` 或直接与 `Nothing` 比较(如 `node IsNot Nothing`)。### **VB.NET 前缀树(Trie)实现** 阅读详情

界面如下:

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace 代码行数统计工具
{
    
public partial class frmCountCodes : Form
    {
        
string curDir="";//当前目录
        string wrfile = "";//代码写入的文件
        string filter = "";//要查找的文件类型
        bool chtxt = false;//是否手动更改目录
        
//private delegate void desearch(string str);//查找委托
        long count = 0;//行数
        int filecount = 0;//发现文件个数
        StringBuilder strinfo;//返回信息
        bool ischeck = false;//是否为连续多行的注释 如C#中的 /*...*/
        public frmCountCodes()
        {
            InitializeComponent();
        }
        
/// <summary>
        
/// 设置目录
        
/// </summary>
        
/// <param name="sender"></param>
        
/// <param name="e"></param>
        private void btnDir_Click(object sender, EventArgs e)
        {
            FolderBrowserDialog fbd 
= new FolderBrowserDialog();
            fbd.Description 
= "选择要统计的文件所在目录";
            fbd.RootFolder 
=Environment.SpecialFolder.MyComputer;
            fbd.ShowNewFolderButton 
= false;
            fbd.ShowDialog();
            
if (fbd.SelectedPath.Trim() != "")
            {
                curDir 
= fbd.SelectedPath;
                txtDir.Text 
= curDir;
            }
        }

        
private void txtDir_TextChanged(object sender, EventArgs e)
        {
            chtxt 
= true;           
        }

        
private void txtDir_Leave(object sender, EventArgs e)
        {
            
if (chtxt)
            {
                
if (Directory.Exists(txtDir.Text.Trim()))
                {
                    curDir 
= txtDir.Text.Trim();
                }
                
else
                {
                    MessageBox.Show(
"此并不是一个有效的目录!请重新设置。");
                    txtDir.Text 
= curDir;
                }
            }
        }

      
        
//统计
        private void btnser_Click(object sender, EventArgs e)
        {
            
try
            {
                btnser.Enabled 
= !btnser.Enabled;
                
if (!Directory.Exists(curDir))
                {
                    MessageBox.Show(
"此并不是一个有效的目录!请重新设置。");
                    btnser.Enabled 
= !btnser.Enabled;
                    
return;
                }
                filter 
= "";
                
//desearch searchfile = new desearch(search);
                count = 0;
                filecount 
= 0;
                strinfo 
= new StringBuilder();               
                
if (chvb.Checked)//选择了VB
                {
                    filter 
+= "*.vb,";
                    
//IAsyncResult ir=searchfile.BeginInvoke("*.vb", null, null);
                    
//while (!ir.IsCompleted)//异步执行
                    
//{
                    
//    Application.DoEvents();
                    
//}
                    
//searchfile.EndInvoke(ir);
                    search("*.vb");
                }
                
if (chCSharp.Checked)//选择了C#
                {
                    filter 
+= "*.cs,";
                    
//IAsyncResult ir = searchfile.BeginInvoke("*.cs", null, null);
                    
//while (!ir.IsCompleted)//异步执行
                    
//{
                    
//    Application.DoEvents();
                    
//}
                    
//searchfile.EndInvoke(ir);  
                    search("*.cs");
                }
                
if (filter.Trim() == "")
                {
                    MessageBox.Show(
"请选择要统计的语言种类");
                    btnser.Enabled 
= !btnser.Enabled;
                    
return;
                }
                strinfo.AppendLine(
"主目录:" + curDir);
                strinfo.AppendLine(
"所选择的文件类型有:" + filter.Substring(0, filter.Length - 1));
                strinfo.AppendLine(
"发现文件个数为:" + filecount);
                strinfo.AppendLine(
"代码总行数为:" + count);
                txtinfo.Text 
= strinfo.ToString();
            }
            
catch
            {
                MessageBox.Show(
"未知错误,请确保路径正确和其子目录可读!", "", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly);
            }           
            btnser.Enabled 
= !btnser.Enabled;
           
        }
        
private void search(string ftype)
        {           
            
string[] files;           
            
if (chChirld.Checked)
            {
                files 
= Directory.GetFiles(curDir, ftype, SearchOption.AllDirectories);//遍历所有子目录
            }
            
else
            {
                files 
= Directory.GetFiles(curDir, ftype, SearchOption.TopDirectoryOnly);
            }
            StreamWriter sw 
=null;               
            
if (wrfile != "")
            {
                
try
                {
                    
if (!File.Exists(wrfile))
                    {
                        FileStream f 
= File.Create(wrfile);
                        f.Close();
                    }
                    sw 
= new StreamWriter(wrfile,false,Encoding.GetEncoding("gb2312"));                   
                }
                
catch
                {
                    sw 
= null;
                }
            }
            
foreach (string file in files)
            {
                
if (file.EndsWith(ftype.Replace("*", "Designer"))) continue;//资源文件
                filecount ++;
                StreamReader sr 
= new StreamReader(file,Encoding.GetEncoding("gb2312"));
                lbSearchFile.Text 
= "当前统计文件:" + Path.GetFileName(file);
                Application.DoEvents();
                
string line;//当前读取的行
                while (!sr.EndOfStream)
                {
                    line 
= sr.ReadLine().Trim();
                    
if (sw!=null&&line != "") sw.WriteLine(line);
                    
if (!checktype(line))
                    {
                        
continue;//如果不是有效代码
                    }
                    count
++;
                }
                sr.Close();
            }
            
if (sw != null) {sw.Close();}
            
//sw.Close();
            lbSearchFile.Text = "";
        }
        
/// <summary>
        
/// 判断是否为有效代码行
        
/// </summary>
        
/// <param name="strline">代码行</param>
        
/// <returns></returns>
        private bool checktype(string strline)
        {
            
bool isok = true;
            
//C#代码判断
            if (!ischeck && strline.StartsWith("/*") && strline.IndexOf("*/")<0)
            {
                isok 
= false;
                ischeck 
= true;//为连续注释               
            }
            
else
            {
                
if (ischeck&&strline.IndexOf("*/") >= 0)
                {
                    ischeck 
= false;
                }
            }
           
            
if (ischeck||strline.StartsWith("//") || (strline.IndexOf("/*") <= 0 && strline.EndsWith("*/")) || strline == "{" || strline == "}")
            {
                isok 
= false;
            }
            
else
                
if (strline.StartsWith("'")||strline=="")//vb.net代码
                    isok = false;
            
return isok;
        }
        
private void 统计FToolStripMenuItem_Click(object sender, EventArgs e)
        {
           
if(btnser.Enabled) btnser_Click(sender, e);
        }

        
private void 设置目录CToolStripMenuItem_Click(object sender, EventArgs e)
        {
            btnDir_Click(sender,e);
        }

        
private void 退出EToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

        
private void btnser_EnabledChanged(object sender, EventArgs e)
        {
            统计FToolStripMenuItem.Enabled 
= btnser.Enabled;
        }
        
//选择保存路径
        private void btnwr_Click(object sender, EventArgs e)
        {
            SaveFileDialog sfd 
= new SaveFileDialog();
            sfd.AddExtension 
= true;
            
//sfd.CheckFileExists = true;
            sfd.DefaultExt = "*.doc";
            sfd.Filter 
= "Word File|*.doc;*.wps|TXT FILE|*.txt";
            sfd.ShowDialog();
            
if (sfd.FileName.Trim() != "") { wrfile = sfd.FileName; txtWrite.Text = wrfile; }
        }

        
private void txtWrite_TextChanged(object sender, EventArgs e)
        {
            wrfile 
= txtWrite.Text;
        }
    }
}
  <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
.net winform下 C#/VB.NET项目代码行数统计(2009-6-25新版本) 如图所示——如果能看到图的话。 因为一直想找个办法来统计一下自己写的代码总行数,但是打开代码文件一个一个的加有点儿太二了.而且还不能忽略空行和注释.因此就写了这么程序用来统计真实的代码总行数.如果各位有什么高见一定要给在下指教   本程序支持对sln(解决方案文件)、csproj(c#项目文件)、vbproj(vb.net项目文件)下所包含的源代码进行代码行数统计工作. 阅读详情

相关推荐

代码统计分析工具SourceCounter

代码统计分析工具SourceCounter

gfdhjf的博客 2022

代码行统计工具(C#)

开发环境介绍: VS2013下的Windows窗体应用程序,程序运行时的初始界面如下: 操作步骤: (1)选择操作系统下的某个文件目录,可以是文件夹目录,也可以是文件目录 (2)几点约束: 是否统计子文件夹里的文件的代码行数; 给定想要统计的代码文件的扩展名,即后缀名; 自定义排除统计某些行(匹配正则表达式); (3)点击“开始统

ys214992的博客 1613

Winform代码行数统计工具完整版(统计结果可导出Excel)

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO; using System.Text.RegularExpressions; using System.Diagnostics; namespace

LilyCoder的博客 557

代码行统计工具 SourceCounterCN简介

介绍 代码统计分析工具,支持30多种代码格式。能够统计包括:代码行数、注释、空行、文件大小等数据。另外,还支持对软件开发项目的各个开发阶段的工数、成本、质量指标等进行分析和预测。是程序开发人员的必备工具。 主要功能如下: 支持对30多种代码格式进行统计 可以对 C++、VB.Net、VB、C#、JAVA、Delphi、ASP.Net、ASP、JSP、HTML 等项目进行统计

fulinwsuafcie的专栏 2108

VB与C#程序源代码行数统计工具开发与实现

在现代软件开发流程中,源代码行数统计工具不仅是衡量项目规模的基础手段,更是评估开发效率、管理版本迭代和优化团队协作的重要依据。随着项目复杂度的提升,手工统计已无法满足实际需求,自动化、精准化的代码统计工具应运而生。本章将深入解析代码行统计的核心概念,探讨其在不同开发场景中的实际应用价值,并对主流工具的功能特点进行对比分析,为后续构建高效、可扩展的代码统计系统奠定理论基础。在代码行统计中,首先要明确“什么是代码行”。通常我们将代码行分为两类:可执行代码(Executable Code)和。

weixin_42361478的博客 798

VB.NET与C#打字练习项目实战入门

WPF 允许你彻底重塑控件外观。比如给按钮加上圆角和悬停动画:</Border></Setter></Trigger></Style>再配合一些微交互动画,比如输入错误时轻微抖动:这些细节虽小,却能让产品瞬间高级起来。入门教学、快速原型?用 VB.NET + WinForms,简单直接;长期维护、专业发布?上 C# + WPF,现代化、易扩展;高并发、低延迟?引入异步、去抖动、后台计算;用户体验至上?重视字体、颜色、动画、反馈机制。

weixin_35761094的博客 683

KeelKit 中集成了代码统计功能

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33881050的博客 122

c#源代码行数统计工具

c#统计项目源代码行数,包括源代码,可自定义排除行,导出excel

程序源代码行数分析统计器

源代码行数统计程序 本程序用C#编写,用于统计程序源代码的行数,包括总行数,空白行数,注释行数和代码行数。 目前本程序能解析VS.NET2003和VS.NET2005的C#工程文件(.csproj),VS.NET2003的VB工程文件(.vbproj),VB6工程文件(.vbp)分析该工程中包含的所有的源代码文件并进行统计,获得其中的代码总行数,注释行数,代码行数...

afhu47033的博客 121

C#有效代码行数统计

C#有效代码行数统计, 暂时支持C#语言,包括一些基本的统计功能

C#代码统计工具

一个统计C#代码的小工具,只需指定C# Project所在的目录即可统计出整个项目的代码行数。

python开源代码app_软件推荐:支持五种语言的开源代码生成器

支持五种语言的开源代码生成器(F#、IronPython、VC、C#、VB)KeelKit 一款国产ORM工具,自动生成Model、自动生成表单、自动生成存储过程访问接口、自动配置连接字符串,代码行数统计、程序集版本号码控制、源码HTML生成、自动生成表结构Word文档、自动支持各种.Net项目,如F# 和IronPython、VC、C#、VB等 ,自动生成与其它语言交换的Model、使用了泛型的...

weixin_39702649的博客 193

eNSP-交换机VLAN配置

VLAN

乌托托的博客 8806

.NET 封装 PCL 点云库,可在C#、VB.NET语言中使用

在3D数据处理和计算机视觉领域,点云技术扮演着至关重要的角色。Point Cloud Library (PCL) 作为最广泛使用的开源C++库之一,提供丰富的算法和工具来处理大规模的3D点云数据。推荐一款专门为 .NET 平台封装的 PCL 库。通过这个封装,PCL的强大功能可以直接在C#和VB.NET中使用,极大地简化开发流程,提高开发效率。对于3D点云处理来说,Pcl点云库必不可少。如果说OpenCV是2D信息获取与处理的结晶,那么Pcl就在3D信息获取与处理上具有同等地位。

sc35262的博客 1695

Windows server 2012R2安装Oracle11g

打开 开始——所有程序——Oracle-OraDb11g_home1——配置和移植工具——Database Configuration Assistant。打开 开始——所有程序——Oracle-OraDb11g_home1——配置和移植工具——Net Configuration Assistant。首先打开Oracle的安装位置找到下面的位置找到tnsnames.ora文件右键编辑。打开Oracle的安装位置找到下面的位置找到tnsnames.ora文件右键编辑。选择仅安装数据库软件。

qq_74770105的博客 3596

使用FileZilla在武汉大学IGS数据分析中心下载GNSS数据

2.依次点击如下图标下载到本地并解压安装(按系统选择要下载的版本)

qq_43381998的博客 6041

.net8 AOT编绎-跨平台调用C#类库的新方法-函数导出

自从.NET CORE跨平台,开源vb.net这2年几乎和C#一样的热度和使用人数了,可惜微软马上急刹车,永久停止了更新。那我们每个手机要多付100-300元授权费用,同时更新缓慢,速度卡卡的(微软经常一些严重的失误,代码修修补补,做的很难用)一个系统相同的内存和CPU可以做100个,1000个容器卖给不同的客户,这是新的发明,微软却以前想不到。比如.NET 8 aot编绎成独立的EXE,不需要安装.NET框架就能运行,这是20年前就需要的功能。其实微软在很多地方做的不好,没统计有多少用户是需要的。

2007

【小白CV教程】YOLOv5+Deepsort实现车辆行人的检测、追踪和计数

【小白CV教程】YOLOv5+Deepsort实现车辆行人的检测、追踪和计数本文禁止转载!项目简介:YOLOv5检测器:DeepSort追踪器:运行demo:训练自己的模型:调用接口:创建检测器:调用检测接口: 本文禁止转载! 项目简介: 使用YOLOv5+Deepsort实现车辆行人追踪和计数,代码封装成一个Detector类,更容易嵌入到自己的项目中。 代码地址(欢迎star): https://github.com/Sharpiless/Yolov5-deepsort-inference 最终效果:

梁瑛平的博客 5万+

C#, VB.NET如何将Excel转换为PDF

在日常工作中,我们经常需要把Excel文档转换为PDF文档。你是否在苦恼如何以C#, VB.NET编程的方式将Excel文档转换为PDF文档呢?你是否查阅了许多资料,运用了大量的代码,但转换后的效果依旧不理想呢?别担心,本文将介绍一种很好的转换方式,在不需要运用大量代码的同时也能保证转换后的效果(转换后的PDF文档与原Excel文档一样)。 我转换文档时使...

akn76920的博客 387

14、微电网控制方法与建模分析

本文详细探讨了微电网的控制方法与建模分析,包括逆变器的小信号状态空间模型、网络模型、负载模型及其组合形成的完整微电网模型。通过对系统特征值和灵敏度因子的分析,揭示了不同模式与系统参数之间的关系。文章还提出了多个研究问题,如岛式系统控制器设计、风力发电控制、并网变换器控制等,为微电网的稳定性分析和优化控制提供了理论支持和实践方向。

elastic6hunter的博客 123

DeepSeek+Cline:开启自动化编程新纪元

随着 AI 技术不断进步,编程领域迎来效率变革。DeepSeek 与 Cline 的结合,成为自动化编程的强大工具。DeepSeek 凭借先进的自然语言处理能力,能精准理解编程需求;Cline 作为 VSCode 插件,可实现代码生成、调试、注释等功能的无缝衔接。本文详细阐述二者安装配置、实战操作流程,涵盖从基础代码生成到复杂项目开发的应用技巧,同时解答常见问题,帮助开发者快速掌握这对 “智能搭档”,提升编程效率,解锁自动化编程的无限可能。

邓邓子的博客 6254
上一篇: RegisterStartupScript和RegisterClientScriptBlock的区别
jaminge
博客等级 码龄20年 0粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值