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 fileCount As Integer
Private lineCount As Integer
A függvény csak a *.vb 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 *.vb 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 Sub SumFiles(ByVal path As String)
Dim files As String() = Directory.GetFiles(path, "*.vb")
Dim file As String
For Each file In files
lineCount += LinesInFile(file)
fileCount += 1
Next file
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 *.vb állomány sem.
Dim dirs As String() = Directory.GetDirectories(path)
Dim dir As String
For Each dir In dirs
SumFiles(dir)
Next dir
End Sub 'SumFiles
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 Function LinesInFile(ByVal f As String) As Integer
Dim sr As StreamReader = File.OpenText(f)
Dim sc As New StringCollection()
While sr.Peek() > -1
sc.Add(sr.ReadLine())
End While
Return sc.Count
End Function 'LinesInFile