欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

荐 批量删除项目代码注释 支持单行// 多行/* 支持前端后端 C# JAVA vue js html

程序员文章站 2022-06-22 20:25:24
先预览一下成果吧~批量删除代码中的注释支持多种文件后缀 (.java、.cs、.aspx、.html、.vue、.js、.css、.wxml、…)支持多种注释类型(//、/**/、、///…)实现原理: 循环项目目录下指定后缀的子文件 .cs .vue .js…一行一行读取内容 检测到指定注释类型 // /* … 就剔除该行代码最后重写入文件附上实现代码(C#控制台):using System;using System.Collections.Generic;using Sy...

先预览一下成果吧~

荐
                                                        批量删除项目代码注释 支持单行// 多行/* 支持前端后端 C# JAVA  vue  js html

  1. 批量删除代码中的注释
  2. 支持多种文件后缀 (.java、.cs、.aspx、.html、.vue、.js、.css、.wxml、…)
  3. 支持多种注释类型(//、/**/、///…) < !–xxx–>这样的块注释 暂时没有处理 ,有空再加。

实现原理: 循环项目目录下指定后缀的子文件 .cs .vue .js…

一行一行读取内容 检测到指定注释类型 // /* … 就剔除该行代码

最后重写入文件

附上实现代码(C#控制台):

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

namespace DeleteNotes
{
    class Program
    {
        static void Main(string[] args)
        {
            Delete Delete = new Delete();


            Console.WriteLine("----------欢迎使用诗肴小工具----------");
            Console.WriteLine("");
            Console.WriteLine("-----------请输入文件夹路径-----------");
            String Path = Console.ReadLine();

            //循环项目文件并删除注释
            Delete.DeleteNotes(Path);

            Console.WriteLine("");
            Console.WriteLine("--------------操作文件结束,结果统计如下:--------------");
            Console.WriteLine("");
            Console.WriteLine("项目文件数:" + Delete.FileAmount + " ,指定后缀文件:" + Delete.SuccessAmount + " ,操作成功:" + Delete.SuccessAmount + " ,操作失败:" + Delete.FailAmount);
            Console.ReadLine();
        }

    }

    /// <summary>
    /// 删除类
    /// </summary>
    public class Delete
    {
        /// <summary>
        /// 指定文件后缀 带点扩展名 ".xxxx" 列表
        /// </summary>
        List<String> ExtensionList = new List<string>();
        /// <summary>
        /// 指定注释类型 
        /// </summary>
        List<String> NotesList = new List<string>();

        //文件数量
        public Int32 FileAmount = 0;
        //操作文件数量
        public Int32 HasActionFileAmount = 0;
        //成功文件数量
        public Int32 SuccessAmount = 0;
        //失败文件数量
        public Int32 FailAmount = 0;

        /// <summary>
        /// 构造方法
        /// </summary>
        public Delete()
        {
            //文件数量
            FileAmount = 0;
            //操作文件数量
            HasActionFileAmount = 0;
            //成功文件数量
            SuccessAmount = 0;
            //失败文件数量
            FailAmount = 0;

            #region 指定文件后缀
            //添加需要删除注释的文件后缀
            ExtensionList.Add(".vue");
            ExtensionList.Add(".js");
            ExtensionList.Add(".css");
            ExtensionList.Add(".scss");
            ExtensionList.Add(".wxss");
            ExtensionList.Add(".wxml");
            ExtensionList.Add(".json");
            ExtensionList.Add(".cs");
            ExtensionList.Add(".xml");
            ExtensionList.Add(".html");
            ExtensionList.Add(".asax");
            ExtensionList.Add(".Master");
            ExtensionList.Add(".aspx");
            ExtensionList.Add(".java");
            #endregion

            #region 指定注释类型
            //添加需要删除注释
            NotesList.Add("//");
            NotesList.Add("/*");
            NotesList.Add("*/");
            NotesList.Add("<!--");
            NotesList.Add("-->");
            NotesList.Add("///");
            NotesList.Add("<%--");
            NotesList.Add("--%>");
            NotesList.Add("◇");//这里是本人个性化的注释 可删除
            #endregion
        }

        /// <summary>
        /// 循环项目文件并删除注释
        /// 实现原理:
        /// 循环项目所有指定后缀的子文件 .cs .vue .js.....
        /// 然后一行一行读取内容 如果检测到 // /* ... 就剔除
        /// 最后重写文件
        /// </summary>
        public void DeleteNotes(String FilePath)
        {
            try
            {
                #region 循环项目文件
                //实例化项目目录
                DirectoryInfo MyDirectory = new DirectoryInfo(FilePath);
                //获取目录下所有文件和子目录
                FileSystemInfo[] FileList = MyDirectory.GetFileSystemInfos();
                //循环文件
                foreach (FileSystemInfo Item in FileList)
                {
                    FileSystemInfo FileInfo = Item;
                    //判断是否为文件夹
                    if (FileInfo is DirectoryInfo)
                    {
                        //递归调用
                        DeleteNotes(FileInfo.FullName);
                    }
                    else
                    {
                        //文件数量
                        FileAmount++;
                        //获取文件后缀 带点扩展名 ".xxxx"
                        String Extension = Path.GetExtension(FileInfo.FullName);
                        //指定后缀类型文件才操作
                        if (ExtensionList.Contains(Extension))
                        {
                            //操作文件数量
                            HasActionFileAmount ++;
                            //--------开始处理文件-----------

                            try
                            {
                                #region 操作文件
                                //操作单行内容
                                //读取文件内容 一次读取一行
                                StreamReader StreamReader = new StreamReader(FileInfo.FullName);
                                StringBuilder NewContent = new StringBuilder();
                                //内容行
                                String Line;
                                while ((Line = StreamReader.ReadLine()) != null)
                                {
                                    //是否包含注释
                                    Boolean HasNote = false;

                                    #region 判断是否包含指定注释
                                    //循环指定注释 
                                    foreach (var item in NotesList)
                                    {
                                        //判断是否包含注释 
                                        if (Line.IndexOf(item)>=0)
                                        {
                                            //只要包含一种注释 就可以终止循环 剔除本行代码
                                            HasNote = true;
                                            break;
                                        }
                                    }
                                    #endregion

                                    //无注释
                                    if (!HasNote)
                                    {
                                        //追加代码内容
                                        NewContent.AppendLine(Line);
                                    }
                                }
                                //释放资源
                                StreamReader.Close();
                                //重新写入文件内容
                                File.WriteAllText(FileInfo.FullName, NewContent.ToString());
                                //成功文件数量
                                SuccessAmount ++;
                                //Console.WriteLine("操作文件: 《" + FileInfo.FullName + "》 成功");

                                #endregion

                            }
                            catch (Exception err)
                            {
                                //失败文件数量
                                FailAmount ++;
                                Console.WriteLine("操作文件: 《"+ FileInfo.FullName + "》 失败,原因:"+err.Message);
                            }

                            //--------结束处理文件-----------

                        }
                    }
                }
                #endregion

            }
            catch (Exception err)
            {
                Console.WriteLine("操作失败,原因:" + err.Message);
            }
        }

    }
}

本文地址:https://blog.csdn.net/qq_29096549/article/details/107309164