A függvényünk két változóba gyűjti az információkat. A fileCount-ban a projekthez tartozó állományok száma, míg a lineCount-ban a forráskód sorok száma kerül.
private int fileCount;
private int lineCount;
A függvény csak a *.cs kiterjesztésű állományokat dolgozza fel. Ez a függvény a SumFiles lesz. Paraméterként azt a mappát kell megadni, melyben összegezni szeretnénk a forráskódokat. Mivel egy projekt több mappából is állhat, hogy a megadott elérési úton található összes mappa teljes mélységig végig lesz vizsgálva.
A függvény első lépésként egy tömböt kér a *.cs kiterjesztésű állományokról. Ezt egy ciklussal végignézzük és a LinesInFile függvénnyel minden egyes állományban megszámláltatjuk a forráskód sorainak számát.
private void SumFiles(string path)
{
string[] files = Directory.GetFiles(path, "*.cs");
foreach (string file in files)
{
lineCount+=LinesInFile(file);
fileCount++;
}
Következő lépésként egy tömböt kérünk azokról a mappákról, melyek a megadott elérési úton találhatók. Egy ciklus segítségével végigmegyünk ezen a tömbön is és minden mappára meghívjuk ismét a SumFiles függvényt rekurzív módon. Ez biztosítja, hogy minden mappa, teljes mélységig bejárásra kerül, így nem maradhat ki egyetlen *.cs állomány sem.
string[] dirs = Directory.GetDirectories(path);
foreach (string dir in dirs)
{
SumFiles(dir);
}
}
A LinesInFile függvény megnyitja a megadott forráskódot és megszámlálja benne a sorok számát, melyet visszatérési értékként szolgáltat.
private int LinesInFile(string file)
{
StreamReader sr = File.OpenText(file);
StringCollection sc = new StringCollection();
while (sr.Peek() > -1)
{
sc.Add(sr.ReadLine());
}
return sc.Count;
}