基于Winform的.cs文件命名空间排序及注释批量处理工具
公司里每个程序员在命名空间的排序和注释上都有很多的不同。
杂乱的命名空间:
using System;
using System.Collections.Generic;
using Autodesk.Revit.UI;
using BIMCore.UI.ModelessForm;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using RevitDocument = Autodesk.Revit.DB.Document;
using Autodesk.Revit.DB;
using BIMCore.UI;
using BIMCore.DB;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using BIMCore.DB.Geometry;
using Res = Revit.Addin.isBIM.QuickFilters.Properties.Resources;
using BIMCore.DB.Log; namespace Revit.Addin.isBIM.QuickFilters
{
public partial class CustomForm : System.Windows.Forms.Form
{
RevitDocument rvtDoc_temp = null;
public List<int> Resultlist = null;
public List<int> Existinglist = null; ... ....
有序的命名空间:
//
// (C) Copyright 2010-2016 by XXX, Inc.
//
// System namespaces
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; // Autodesk namespaces
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using Autodesk.Revit.UI.Selection; // BIMCore namespaces
using BIMCore.DB;
using BIMCore.DB.Geometry; // My namespaces
using Res = Revit.Addin.isBIM.PowerMeasure.Properties.Resources;
using Revit.Addin.isBIM.PowerMeasure.Views;
using Revit.Addin.isBIMAppWrapper; namespace Revit.Addin.isBIM.PowerMeasure
{ ... ...
为了方便管理代码,这里我制作了一个批量处理.cs文件中命名空间排序及注释的工具。
代码:
private void buttonConfirm_Click(object sender, EventArgs e)
{
string strfilepath = textBoxFilePath.Text;
List<string> liststrdocuments = new List<string>();
progressBarFiles.Visible = true;
if (!string.IsNullOrWhiteSpace(textBoxFilePath.Text) && System.IO.Directory.Exists(textBoxFilePath.Text)) //判断路径是否为空或者是否存在
{
if (!string.IsNullOrWhiteSpace(textBoxNameSpace.Text))
{
string[] strdocuments = Directory.GetFiles(strfilepath, "*.cs",SearchOption.AllDirectories); //得到文件夹路径下的所有cs文件路径
if (strdocuments.Length == ) //判断文件夹中是否没有cs文件
{
progressBarFiles.Visible = false;
MessageBox.Show(Properties.Resources.StringFileExist);
}
else
{
foreach (string strdocu in strdocuments) //排除部分cs文件,其中obj文件夹下的cs文件直接忽略
{
if(boolMode==true)
{
if (!strdocu.Contains("AssemblyInfo") && !strdocu.Contains("Designer") && !strdocu.Contains("obj") && !strdocu.Contains("designer"))
{
liststrdocuments.Add(strdocu);
}
}
else
{
if(!strdocu.Contains("obj"))
{
liststrdocuments.Add(strdocu);
}
}
} for (int i = ; i < liststrdocuments.Count; i++) //改变文件只读属性
{
if (File.GetAttributes(liststrdocuments[i]).ToString().IndexOf("ReadOnly") != -)
{
File.SetAttributes(liststrdocuments[i], FileAttributes.Normal);
}
}
int intprogress = ;
progressBarFiles.Maximum = liststrdocuments.Count;
DataTable dt = new DataTable();
dt.Columns.Add((Properties.Resources.StringDatagridViewCellHeaderOne), typeof(string));
dt.Columns.Add((Properties.Resources.StringDatagridViewCellHeaderTwo), typeof(string));
string strupdatestatus = null; foreach (string Documentpath in liststrdocuments) //遍历每个路径
{
System.Text.Encoding fileEncoding = GetFileEncodeType(Documentpath); //获取该文件的编码格式
intprogress++;
progressBarFiles.Value = intprogress;
string namespacerest = null;
string strusingsystem = null;
string strusingAutodesk = null;
string strusingBIMCore = null;
string strusingrest = null;
string namespaceresult = string.Empty;
string textboxcopyright = textBoxNameSpace.Text; List<string> listtempline = new List<string>();
List<string> listnamespacerest = new List<string>();
List<string> namespacesurplus = new List<string>(); if (DocumentChanged(Documentpath) == false)
{
strupdatestatus = Properties.Resources.StringUpdateStatusOne;
dt=BuildDataTable(dt,Documentpath,strupdatestatus);
}
else
{
string[] lines = File.ReadAllLines(Documentpath); //根据路径,分行读取该文件
foreach (string line in lines)
{
if (line.StartsWith("using"))
{
listtempline.Add(line); //得到命名空间的行
}
else if (!string.IsNullOrWhiteSpace(line))
{
listnamespacerest.Add(line); //记录剩下的部分
}
strupdatestatus = Properties.Resources.StringUpdateStatusTwo;
} #region 对namespace中的多余部分进行处理,保留没有空行的部分
foreach (string line in listnamespacerest)
{
if (line.StartsWith("namespace") || line.StartsWith("["))
{
break;
}
else if (!string.IsNullOrWhiteSpace(line))
{
namespacesurplus.Add(line);
}
}
if (namespacesurplus.Count != )
{
for (int i = ; i < listnamespacerest.Count; i++)
{
for (int j = ; j < namespacesurplus.Count; j++)
{
if (namespacesurplus[j] == listnamespacerest[i])
{
listnamespacerest.RemoveAt(i);
}
}
}
}
foreach (string line in listnamespacerest)
{
namespacerest += line + "\r\n";
}
#endregion listtempline.Sort(delegate(string str1, string str2) //对命名空间进行排序
{
return Comparer<string>.Default.Compare(str1.Trim(';'), str2.Trim(';'));
}); foreach (string line in listtempline) //对命名空间行归类
{
if (line.StartsWith("using System"))
{
strusingsystem += line + "\r\n";
}
else if (line.StartsWith("using Autodesk"))
{
strusingAutodesk += line + "\r\n";
}
else if (line.StartsWith("using BIMCore"))
{
strusingBIMCore += line + "\r\n";
}
else
{
strusingrest += line + "\r\n";
}
}
string strusingAutodeskresult;
string strusingBIMCoreresult;
string strusingrestresult;
strusingAutodeskresult = strusingBIMCoreresult = strusingrestresult = string.Empty;
string strusingsystemresult = "// System namespaces" + "\r\n" + strusingsystem + "\r\n"; if (!string.IsNullOrWhiteSpace(strusingAutodesk))
{
strusingAutodeskresult = strusingAutodesk;
strusingAutodeskresult = "// Autodesk namespaces" + "\r\n" + strusingAutodesk + "\r\n";
}
if (!string.IsNullOrWhiteSpace(strusingBIMCore))
{
strusingBIMCoreresult = strusingBIMCore;
strusingBIMCoreresult = "// BIMCore namespaces" + "\r\n" + strusingBIMCore + "\r\n";
}
if (!string.IsNullOrWhiteSpace(strusingrest))
{
strusingrestresult = strusingrest;
strusingrestresult = "// My namespaces" + "\r\n" + strusingrestresult + "\r\n";
}
namespaceresult = textboxcopyright + "\r\n" + strusingsystemresult + //重写文件
strusingAutodeskresult + strusingBIMCoreresult + strusingrestresult + namespacerest;
File.WriteAllText(Documentpath, namespaceresult, fileEncoding); textboxcopyright = strusingsystem = strusingAutodesk = strusingBIMCore = strusingrest = namespacerest = string.Empty; //变量清空
dt=BuildDataTable(dt, Documentpath, strupdatestatus); } } #region 控件属性的设置
dataGridViewfiles.DataSource = dt; //datagridview的设置
dataGridViewfiles.AllowUserToAddRows = false;
dataGridViewfiles.RowHeadersVisible = false;
dataGridViewfiles.AllowUserToResizeColumns = false;
dataGridViewfiles.AllowUserToResizeRows = false;
dataGridViewfiles.Columns[].Width = Convert.ToInt32(Math.Ceiling(0.3 * Convert.ToDouble(dataGridViewfiles.Width))); //设定更新状态栏的列宽
dataGridViewfiles.Columns[].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; //设定更新状态栏的字体居中
progressBarFiles.Visible = false;
#endregion
}
}
else
{
progressBarFiles.Visible = false;
MessageBox.Show(Properties.Resources.StringTextBoxCopyrightStauts);
}
}
else
{
progressBarFiles.Visible = false;
MessageBox.Show(Properties.Resources.StringTextBoxFileStatus);
}
}
169行对文件重写时依然使用文件原有编码格式,防止打开文件时候有乱码。
52行的子函数 GetFileEncodeType(string filename)判断编码格式 函数转载地址:http://www.cnblogs.com/swtseaman/archive/2011/05/17/2048689.html
public System.Text.Encoding GetFileEncodeType(string filename)
{
System.IO.FileStream fs = new System.IO.FileStream(filename, System.IO.FileMode.Open, System.IO.FileAccess.Read, FileShare.ReadWrite);
//FileShare.ReadWrite, 不然文件在进行其他IO操作时进程会被占用而报错 System.IO.BinaryReader br = new System.IO.BinaryReader(fs);
Byte[] buffer = br.ReadBytes();
if(buffer[]>=0xEF)
{
if(buffer[]==0xEF && buffer[]==0xBB)
{
return System.Text.Encoding.UTF8;
}
else if(buffer[]==0xFE && buffer[]==0xFF)
{
return System.Text.Encoding.BigEndianUnicode;
}
else if(buffer[]==0xFF && buffer[]==0xFE)
{
return System.Text.Encoding.Unicode;
}
else
{
return System.Text.Encoding.Default;
}
}
else
{
return System.Text.Encoding.Default;
}
}
#endregion
68行为文件更新判据:判断cs文件中是否有“// System namespaces”, 还有就是cs文件中的copyright部分是否与winform中的copyright文本框内容相同。
private bool DocumentChanged(string path)
{
bool boolWholeStatus = true;
bool boolStatus1 = false;
bool boolStatus2 = false;
string oralcopyright = string.Empty;
string txtnamspace = textBoxNameSpace.Text+"\r\n";
string[] lines = File.ReadAllLines(path); //根据路径,分行读取该文件 foreach (string line in lines)
{
if (line.StartsWith("// System namespaces") || line.StartsWith("// System Namespaces") || line.StartsWith("//System namespaces") ||
line.StartsWith("//System Namespaces"))
{
boolStatus2 = true;
break;
}
else if(!string.IsNullOrEmpty("line"))
{
oralcopyright += line + "\r\n";
}
}
if (txtnamspace.Equals(oralcopyright))
{
boolStatus1 = true;
} if (boolStatus1 == true && boolStatus2 == true)
{
boolWholeStatus = false;
}
return boolWholeStatus;
}
71行的datatable构建方法:
private DataTable BuildDataTable(DataTable dt, string path, string status)
{
DataRow dr = dt.NewRow();
dr[Properties.Resources.StringDatagridViewCellHeaderOne] = path;
dr[Properties.Resources.StringDatagridViewCellHeaderTwo] = status;
dt.Rows.Add(dr);
return dt;
}
基于Winform的.cs文件命名空间排序及注释批量处理工具的更多相关文章
- 【Winform】.cs文件命名空间排序及注释批量处理工具
公司里每个程序员在命名空间的排序和注释上都有很多的不同. 杂乱的命名空间: using System; using System.Collections.Generic; using Autodesk ...
- 如何快速开发基于Winform的应用系统
在我们实际业务开发中,从头开发一个应用系统,不管是基于BS的前端项目,还是基于Winform的CS应用系统,都是由容易到复杂,逐步演化的一个开发过程,如果我们基于一定基础上,并配合一些配套的开发工具, ...
- WinForm中AssemblyInfo.cs文件参数具体讲解
在.NET中有一个配置文件AssemblyInfo.cs主要用来设定生成的有关程序集的常规信息dll文件的一些参数,下面是默认的AssemblyInfo.cs文件的内容具体介绍 //是否符合公共语言规 ...
- C#——Visual Studio项目中的AssemblyInfo.cs文件包含的配置信息
Visual Studio程序集项目中的AssemblyInfo.cs文件中的内容 using System.Reflection; using System.Runtime.CompilerServ ...
- 【基于WinForm+Access局域网共享数据库的项目总结】之篇一:WinForm开发总体概述与技术实现
篇一:WinForm开发总体概述与技术实现 篇二:WinForm开发扇形图统计和Excel数据导出 篇三:Access远程连接数据库和窗体打包部署 [小记]:最近基于WinForm+Access数据库 ...
- 从java文件和CS文件里查询方法使用次数工具
前几天,领导让我找一下老系统(Java)里getRemoteUser方法都哪个文件用了,package是什么,方法被调用了多少次,当时因为着急,所以,直接人工找的,但是以后要是再出现,人工找就太讨厌了 ...
- 【基于WinForm+Access局域网共享数据库的项目总结】之篇二:WinForm开发扇形图统计和Excel数据导出
篇一:WinForm开发总体概述与技术实现 篇二:WinForm开发扇形图统计和Excel数据导出 篇三:Access远程连接数据库和窗体打包部署 [小记]:最近基于WinForm+Access数据库 ...
- 【基于WinForm+Access局域网共享数据库的项目总结】之篇三:Access远程连接数据库和窗体打包部署
篇一:WinForm开发总体概述与技术实现 篇二:WinForm开发扇形图统计和Excel数据导出 篇三:Access远程连接数据库和窗体打包部署 [小记]:最近基于WinForm+Access数据库 ...
- WPF根据Oracle数据库的表,生成CS文件小工具
开发小工具的原因: 1.我们公司的开发是客户端用C#,服务端用Java,前后台在通讯交互的时候,会用到Oracle数据库的字段,因为服务器端有公司总经理开发的一个根据Oracle数据库的表生成的cla ...
随机推荐
- Wix 安装部署教程(九) --用WPF做安装界面
经常安装PC端的应用,特别是重装系统之后,大致分为两类.一类像QQ,搜狗输入法这样的.分三步走的:第一个页面可以自定义安装路径和软件许可.第二个页面显示安装进度条,第三个页面推荐其他应用.先不管人家怎 ...
- 自定义路径创建Cocos2d-x项目
自定义路径创建Cocos2d-x项目 本文介绍windows下面如何优雅的创建Cocos2d-x项目.为何称之为优雅,是因为现在网上流传的一些创建方法有一些问题.大致内容如下: l 使用VS向导创建 ...
- js中各种跨域问题实战小结(二)
这里接上篇:js中各种跨域问题实战小结(一) 后面继续学习的过程中,对上面第一篇有稍作休整.下面继续第二部分: -->5.利用iframe和location.hash -->6.windo ...
- [安卓] 17、一个简单的例子学安卓侧滑设计——用开源slidingmenu
效果如下: 下面是工程结构: 整个工程包括android-v7.SlidingMenu-lib和主工程SlidingMenuTest部分 其中前两个作为lib,后一个为主工程 主工程包含两个lib工程 ...
- Java基础类型总结
最近一直在总结反思自己, 趁着现在请假在学校上课的空余时间,从基础开始重新温故学习下Java,充实下自己. 一.数据类型 从下图中,我们可以很清晰的看出Java中的类型,其中红色方框中的是Java的4 ...
- Redis主从复制问题和扩容问题的解决思路
转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/106.html?1455867541 一.解决主从复制问题 当使用Redi ...
- Atititi 版本管理 rc final rtm ga release 软件的生命周期中一般分4个版本
Atititi 版本管理 rc final rtm ga release 软件的生命周期中一般分4个版本 RC=Release Candidate,含义是"发布候选版",它不是最终 ...
- JS 操作 DOM
定义:文档对象模型(Document Object Model,DOM)是一种用于HTML和XML文档的编程接口.它给文档提供了一种结构化的表示方法,可以改变文档的内容和呈现方式 节点:(例如:< ...
- 每天一个linux命令(42):kill命令
Linux中的kill命令用来终止指定的进程(terminate a process)的运行,是Linux下进程管理的常用命令.通常,终止一个前台进程可以使用Ctrl+C键,但是,对于一个后台进程就须 ...
- 每天一个linux命令(32):gzip命令
减少文件大小有两个明显的好处,一是可以减少存储空间,二是通过网络传输文件时,可以减少传输的时间.gzip是在Linux系统中经常使用的一个对文件进行压缩和解压缩的命令,既方便又好用.gzip不仅可以用 ...