博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Winform】.cs文件命名空间排序及注释批量处理工具
阅读量:5363 次
发布时间:2019-06-15

本文共 12431 字,大约阅读时间需要 41 分钟。

公司里每个程序员在命名空间的排序和注释上都有很多的不同。

杂乱的命名空间:

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
Resultlist = null; public List
Existinglist = null; ... ....

 

有序的命名空间:

//// (C) Copyright 2010-2016 by XXX, Inc.//// System namespacesusing System;using System.Collections.Generic;using System.Linq;using System.Text;// Autodesk namespacesusing Autodesk.Revit.DB;using Autodesk.Revit.UI;using Autodesk.Revit.UI.Selection;// BIMCore namespacesusing BIMCore.DB;using BIMCore.DB.Geometry;// My namespacesusing Res = Revit.Addin.isBIM.PowerMeasure.Properties.Resources;using Revit.Addin.isBIM.PowerMeasure.Views;using Revit.Addin.isBIMAppWrapper;namespace Revit.Addin.isBIM.PowerMeasure{...  ...

 

为了方便管理代码,这里我制作了一个批量处理.cs文件中命名空间排序及注释的工具。

代码:

1 private void buttonConfirm_Click(object sender, EventArgs e)  2         {  3             string strfilepath = textBoxFilePath.Text;  4             List
liststrdocuments = new List
(); 5 progressBarFiles.Visible = true; 6 if (!string.IsNullOrWhiteSpace(textBoxFilePath.Text) && System.IO.Directory.Exists(textBoxFilePath.Text)) //判断路径是否为空或者是否存在 7 { 8 if (!string.IsNullOrWhiteSpace(textBoxNameSpace.Text)) 9 { 10 string[] strdocuments = Directory.GetFiles(strfilepath, "*.cs",SearchOption.AllDirectories); //得到文件夹路径下的所有cs文件路径 11 if (strdocuments.Length == 0) //判断文件夹中是否没有cs文件 12 { 13 progressBarFiles.Visible = false; 14 MessageBox.Show(Properties.Resources.StringFileExist); 15 } 16 else 17 { 18 foreach (string strdocu in strdocuments) //排除部分cs文件,其中obj文件夹下的cs文件直接忽略 19 { 20 if(boolMode==true) 21 { 22 if (!strdocu.Contains("AssemblyInfo") && !strdocu.Contains("Designer") && !strdocu.Contains("obj") && !strdocu.Contains("designer")) 23 { 24 liststrdocuments.Add(strdocu); 25 } 26 } 27 else 28 { 29 if(!strdocu.Contains("obj")) 30 { 31 liststrdocuments.Add(strdocu); 32 } 33 } 34 } 35 36 for (int i = 0; i < liststrdocuments.Count; i++) //改变文件只读属性 37 { 38 if (File.GetAttributes(liststrdocuments[i]).ToString().IndexOf("ReadOnly") != -1) 39 { 40 File.SetAttributes(liststrdocuments[i], FileAttributes.Normal); 41 } 42 } 43 int intprogress = 0; 44 progressBarFiles.Maximum = liststrdocuments.Count; 45 DataTable dt = new DataTable(); 46 dt.Columns.Add((Properties.Resources.StringDatagridViewCellHeaderOne), typeof(string)); 47 dt.Columns.Add((Properties.Resources.StringDatagridViewCellHeaderTwo), typeof(string)); 48 string strupdatestatus = null; 49 50 foreach (string Documentpath in liststrdocuments) //遍历每个路径 51 { 52 System.Text.Encoding fileEncoding = GetFileEncodeType(Documentpath); //获取该文件的编码格式 53 intprogress++; 54 progressBarFiles.Value = intprogress; 55 string namespacerest = null; 56 string strusingsystem = null; 57 string strusingAutodesk = null; 58 string strusingBIMCore = null; 59 string strusingrest = null; 60 string namespaceresult = string.Empty; 61 string textboxcopyright = textBoxNameSpace.Text; 62 63 List
listtempline = new List
(); 64 List
listnamespacerest = new List
(); 65 List
namespacesurplus = new List
(); 66 67 68 if (DocumentChanged(Documentpath) == false) 69 { 70 strupdatestatus = Properties.Resources.StringUpdateStatusOne; 71 dt=BuildDataTable(dt,Documentpath,strupdatestatus); 72 } 73 else 74 { 75 string[] lines = File.ReadAllLines(Documentpath); //根据路径,分行读取该文件 76 foreach (string line in lines) 77 { 78 if (line.StartsWith("using")) 79 { 80 listtempline.Add(line); //得到命名空间的行 81 } 82 else if (!string.IsNullOrWhiteSpace(line)) 83 { 84 listnamespacerest.Add(line); //记录剩下的部分 85 } 86 strupdatestatus = Properties.Resources.StringUpdateStatusTwo; 87 } 88 89 #region 对namespace中的多余部分进行处理,保留没有空行的部分 90 foreach (string line in listnamespacerest) 91 { 92 if (line.StartsWith("namespace") || line.StartsWith("[")) 93 { 94 break; 95 } 96 else if (!string.IsNullOrWhiteSpace(line)) 97 { 98 namespacesurplus.Add(line); 99 }100 }101 if (namespacesurplus.Count != 0)102 {103 for (int i = 0; i < listnamespacerest.Count; i++)104 {105 for (int j = 0; j < namespacesurplus.Count; j++)106 {107 if (namespacesurplus[j] == listnamespacerest[i])108 {109 listnamespacerest.RemoveAt(i);110 }111 }112 }113 }114 foreach (string line in listnamespacerest)115 {116 namespacerest += line + "\r\n";117 }118 #endregion119 120 121 listtempline.Sort(delegate(string str1, string str2) //对命名空间进行排序122 {123 return Comparer
.Default.Compare(str1.Trim(';'), str2.Trim(';'));124 });125 126 127 foreach (string line in listtempline) //对命名空间行归类128 {129 if (line.StartsWith("using System"))130 {131 strusingsystem += line + "\r\n";132 }133 else if (line.StartsWith("using Autodesk"))134 {135 strusingAutodesk += line + "\r\n";136 }137 else if (line.StartsWith("using BIMCore"))138 {139 strusingBIMCore += line + "\r\n";140 }141 else142 {143 strusingrest += line + "\r\n";144 }145 }146 string strusingAutodeskresult;147 string strusingBIMCoreresult;148 string strusingrestresult;149 strusingAutodeskresult = strusingBIMCoreresult = strusingrestresult = string.Empty;150 string strusingsystemresult = "// System namespaces" + "\r\n" + strusingsystem + "\r\n";151 152 if (!string.IsNullOrWhiteSpace(strusingAutodesk))153 {154 strusingAutodeskresult = strusingAutodesk;155 strusingAutodeskresult = "// Autodesk namespaces" + "\r\n" + strusingAutodesk + "\r\n";156 }157 if (!string.IsNullOrWhiteSpace(strusingBIMCore))158 {159 strusingBIMCoreresult = strusingBIMCore;160 strusingBIMCoreresult = "// BIMCore namespaces" + "\r\n" + strusingBIMCore + "\r\n";161 }162 if (!string.IsNullOrWhiteSpace(strusingrest))163 {164 strusingrestresult = strusingrest;165 strusingrestresult = "// My namespaces" + "\r\n" + strusingrestresult + "\r\n";166 }167 namespaceresult = textboxcopyright + "\r\n" + strusingsystemresult + //重写文件168 strusingAutodeskresult + strusingBIMCoreresult + strusingrestresult + namespacerest;169 File.WriteAllText(Documentpath, namespaceresult, fileEncoding);170 171 textboxcopyright = strusingsystem = strusingAutodesk = strusingBIMCore = strusingrest = namespacerest = string.Empty; //变量清空172 dt=BuildDataTable(dt, Documentpath, strupdatestatus); 173 174 }175 176 }177 178 #region 控件属性的设置179 dataGridViewfiles.DataSource = dt; //datagridview的设置180 dataGridViewfiles.AllowUserToAddRows = false; 181 dataGridViewfiles.RowHeadersVisible = false;182 dataGridViewfiles.AllowUserToResizeColumns = false;183 dataGridViewfiles.AllowUserToResizeRows = false;184 dataGridViewfiles.Columns[1].Width = Convert.ToInt32(Math.Ceiling(0.3 * Convert.ToDouble(dataGridViewfiles.Width))); //设定更新状态栏的列宽185 dataGridViewfiles.Columns[1].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; //设定更新状态栏的字体居中 187 progressBarFiles.Visible = false;192 #endregion193 }194 }195 else196 {197 progressBarFiles.Visible = false; 198 MessageBox.Show(Properties.Resources.StringTextBoxCopyrightStauts);199 } 200 }201 else202 {203 progressBarFiles.Visible = false; 204 MessageBox.Show(Properties.Resources.StringTextBoxFileStatus);205 } 206 }

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(2);            if(buffer[0]>=0xEF)            {                if(buffer[0]==0xEF && buffer[1]==0xBB)                {                     return System.Text.Encoding.UTF8;                }                else if(buffer[0]==0xFE && buffer[1]==0xFF)                {                     return System.Text.Encoding.BigEndianUnicode;                }                else if(buffer[0]==0xFF && buffer[1]==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文本框内容相同。

1 private bool DocumentChanged(string path) 2         {   3             bool boolWholeStatus = true; 4             bool boolStatus1 = false; 5             bool boolStatus2 = false; 6             string oralcopyright = string.Empty; 7             string txtnamspace = textBoxNameSpace.Text+"\r\n"; 8             string[] lines = File.ReadAllLines(path);       //根据路径,分行读取该文件 9             10             foreach (string line in lines)11             {12                 if (line.StartsWith("// System namespaces") || line.StartsWith("// System Namespaces") || line.StartsWith("//System namespaces") ||                        line.StartsWith("//System Namespaces"))13                 {14                     boolStatus2 = true;15                     break;16                 }17                 else if(!string.IsNullOrEmpty("line"))18                 {19                     oralcopyright += line + "\r\n";20                 }21             }22             if (txtnamspace.Equals(oralcopyright))23             {24                 boolStatus1 = true;25             }26             27             if (boolStatus1 == true && boolStatus2 == true)28             {29                 boolWholeStatus = false;30             }31             return boolWholeStatus;32         }

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;        }

 

转载于:https://www.cnblogs.com/lovecsharp094/p/5427462.html

你可能感兴趣的文章
第四周作业
查看>>
20151121
查看>>
线段重叠 (思维好题)
查看>>
Codeforces Round #413 C. Fountains (线段树的创建、查询、更新)
查看>>
SBuild 0.1.5 发布,基于 Scala 的构建系统
查看>>
WordPress 3.5 RC3 发布
查看>>
DOM扩展札记
查看>>
primitive assembly
查看>>
根据经纬度查询位置百度api
查看>>
浅谈localStorage的用法
查看>>
Ad Exchange基本接口和功能
查看>>
Angular ui-router的常用配置参数详解
查看>>
软考知识点梳理--项目评估
查看>>
把特斯拉送上火星的程序员,马斯克!
查看>>
三测单
查看>>
MyBatis 缓存
查看>>
SQL中left outer join与inner join 混用时,SQL Server自动优化执行计划
查看>>
mac下python实现vmstat
查看>>
jxl.dll操作总结
查看>>
成员函数对象类的const和非const成员函数的重载
查看>>