//下面按照文件名分类统计不同扩展名源程序的总行数
foreach (string extcur in ext)
{
numcur = 0;
linecur = 0;
for (int i = 0; i < codeList.Count; i++)
{
codeInfo cur = (codeInfo)codeList[i];
if (extcur == cur.ext)
{
numcur++; linecur += cur.line;
}
}
lineall += linecur;
listBox1.Items.Add(string.Format(" {0,-8}" + numcur + " 个文件 " + linecur + "行", extcur)); //统计完一种拓展名后向Listbox添加一行信息
}
listBox1.Items.Add(" 总计" + codeList.Count + "个文件 " + lineall + "行");
}
}
在实现过程中,还牵扯到:对输入的拓展名进行分割、填充dataGridView的行/列以显示所有统计文件的详细信息等问题。篇幅限制,不做介绍,详见代码。
五、提高篇
我们可以新建一个Form专门停放dataGridView(更好的显示效果)。这样就牵扯到了窗体间如何传递codeList集合的问题。提示大家可以用this仿“指针”进行传递。
本程序只有一个待统计目录,有兴趣的朋友可以考虑:如何设置多个待统计目录(多一层foreach)。
另外,采用StreamReader获取文件行数的方法再极端大的源码样本运行时会略显慢,大家可以考虑采取其它优化的办法,比如:利用统计学原理找到一个常数(平均每行字符数),然后用文件长度处以这个数以得到行数,当然,这样会降低统计精度。
至此,我们已经体验了Visual C# 2005的强大功能并成功实现了这一软件。本程序在Visual C# 2005 WindowsXP SP2下调试通过。

