统计项目源代码文件的行数,基于c#(原创)

//没什么大的用处,统计文件夹和子文件夹后缀名相符的所有文件行数,不统计空行
//应项目要求而写。作者:ajou时间:2005年12月9号下午
//命令行程序  用法csd.exe 文件名
//希望对大家有点贡献
namespace FileAndFolderList
{
    using System;
    using System.Collections;
    using System.IO;
    using System.Windows.Forms;

    internal class FileAndFolderList
    {
        // Methods
        public FileAndFolderList()
        {
            this.fileList = new ArrayList();
            this.lineCountList = new ArrayList();
            this.sum = 0;
        }

        private void Count()
        {
            int num1 = 0;
            IEnumerator enumerator1 = this.fileList.GetEnumerator();
            while (enumerator1.MoveNext())
            {
                num1 = this.CountFileLines(enumerator1.Current.ToString());
                this.sum += num1;
                this.lineCountList.Add(num1);
            }
        }

        private int CountFileLines(string sourceFilePath)
        {
            string text1;
            int num1 = 0;
            StreamReader reader1 = new StreamReader(sourceFilePath);
            while ((text1 = reader1.ReadLine()) != null)
            {
                if (text1.Trim() == "")
                {
                    continue;
                }
                num1++;
            }
            return num1;
        }

        private static void DeleteErrLogFile()
        {
            string text1 = Application.StartupPath + @"/ErrorLog.Text";
            if (File.Exists(text1))
            {
                File.Delete(text1);
            }
        }

        private void Enumerate(DirectoryInfo diStart, ArrayList arrfileExtension)
        {
            try
            {
                FileSystemInfo[] infoArray1 = diStart.GetFileSystemInfos();
                for (int num1 = 0; num1 < infoArray1.Length; num1++)
                {
                    FileSystemInfo info1 = infoArray1[num1];
                    if (info1.GetType() == typeof(DirectoryInfo))
                    {
                        this.Enumerate((DirectoryInfo) info1, arrfileExtension);
                    }
                    if (info1.GetType() == typeof(FileInfo))
                    {
                        IEnumerator enumerator1 = arrfileExtension.GetEnumerator();
                        while (enumerator1.MoveNext())
                        {
                            if (info1.Extension.ToLower() != enumerator1.Current.ToString().ToLower())
                            {
                                continue;
                            }
                            this.fileList.Add(info1.FullName);
                        }
                    }
                }
            }
            catch (Exception exception1)
            {
                FileAndFolderList.WriteErrLog(exception1.Message);
            }
        }

        [STAThread]
        private static void Main(string[] args)
        {
   //放置工程源代码的路径
            DirectoryInfo info1 = new DirectoryInfo(@"D:/desktop/");
            FileAndFolderList list1 = new FileAndFolderList();
            ArrayList list2 = new ArrayList();
   //项目文件后缀名
            list2.Add(".pas");
            list1.Enumerate(info1, list2);
            Console.WriteLine("Get File List OK!");
            Console.WriteLine("Total target Files = " + list1.fileList.Count.ToString());
            Console.WriteLine("Waiting for counting.../n/n/n");
            list1.Count();
            FileAndFolderList.PrintValues(list1.fileList);
            FileAndFolderList.PrintValues(list1.lineCountList);
            Console.WriteLine("/n");
            Console.WriteLine("Get File Line Count OK!");
            Console.WriteLine("Total lines Count = " + list1.sum.ToString());
            Console.WriteLine("Press enter to exit!");
            Console.ReadLine();
        }

        public static void PrintValues(IEnumerable myList)
        {
            IEnumerator enumerator1 = myList.GetEnumerator();
            while (enumerator1.MoveNext())
            {
                Console.Write("/t{0}", enumerator1.Current);
            }
        }

        private static void WriteErrLog(string msg)
        {
            string text1 = Application.StartupPath + @"/ErrorLog.Text";
            StreamWriter writer1 = new StreamWriter(text1, true);
            writer1.WriteLine(DateTime.Now.ToLongDateString() + "/t" + msg);
            writer1.Close();
        }


        // Fields
        private ArrayList fileList;
        private ArrayList lineCountList;
        private int sum;
    }
}

//源文件通过反编译
//更符合C#编程风格
//不过少了些代码注释。

刚制作了一个GUI,如下图,有需要的可以向我索取.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值