实现原理: 循环项目目录下指定后缀的子文件 .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
如对本文有疑问, 点击进行留言回复!!
荐 Ceph rgw中的Object的组织形式及存储结构分析
微服务架构实战学习笔记 第八章 Spring Cloud Stream与事件驱动
SpringCloudAlibaba - 基于Nacos构建分布式配置中心
荐 springboot2整合mybatis-plus3踩到的坑
网友评论