//没什么大的用处,统计文件夹和子文件夹后缀名相符的所有文件行数,不统计空行
//应项目要求而写。作者: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#编程风格
//不过少了些代码注释。