看軟體工程方面的一些書時裡面會提到原始碼多少行.比如一百萬行程式碼的專案與十萬行程式碼的專案所採取的管理方式可能就不一樣.於是就想了解下自己參與的專案目前有多少行程式碼了.但一問同事都說不太清楚,可能是幾十萬上百萬的樣子吧.這也太不準了.於是就想到寫些程式碼去計算下.
其實方法很簡單,只要遍歷所有原始檔,然後計算每一個原始檔有多少行程式碼就行了.下面是詳細的程式碼
using System.IO; //這個是檔案讀寫操作用到的名稱空間
using System.Text.RegularExpressions; //這個是正則表示式名稱空間
int totalSourceCodeLines = 0; //定義個全域性變數
public int GetsourceCodeLins(string projectPath) //引數是原始檔所在的路徑,比如D:\SourceCode\MyCode
{
CalculateTotalCodeLins(projectPath); //呼叫另一個函式
return totalSourceCodeLines;
}
private void CalculateTotalCodeLins(string projectPath)
//遍歷所有目錄
DirectoryInfo dir = new DirectoryInfo(projectPath);
foreach (DirectoryInfo dirInfo in dir.GetDirectories())
CalculateTotalCodeLins(projectPath + "\\" + dirInfo.Name); //遞迴呼叫
遍歷目錄下的所有原始檔
foreach (FileInfo fileInfo in dir.GetFiles())
if (Regex.IsMatch(fileInfo.Name, @".*\.(h|cpp)")) //針對不同的原始檔可以用正則表示式篩選,這裡是C++原始檔.
totalSourceCodeLines += CalculateCodeLines(projectPath + "\\" + fileInfo.Name); //呼叫另一個函式計算每個原始檔多少行.
//計算每個原始檔多少行
private int CalculateCodeLines(string soureFilePath)
FileStream fStream = new FileStream(soureFilePath, FileMode.Open);
StreamReader reader = new StreamReader(fStream);
int count = 0;
while (reader.ReadLine() != null)
count++;
reader.Close();
fStream.Close();
return count;
當然這樣計算出來的行數可能不太準確.可以考慮一共多少個原始檔,然後每個原始檔平均有多少行標頭檔案,多少空格.然後減去這些行數就相對比較準確了。
看軟體工程方面的一些書時裡面會提到原始碼多少行.比如一百萬行程式碼的專案與十萬行程式碼的專案所採取的管理方式可能就不一樣.於是就想了解下自己參與的專案目前有多少行程式碼了.但一問同事都說不太清楚,可能是幾十萬上百萬的樣子吧.這也太不準了.於是就想到寫些程式碼去計算下.
其實方法很簡單,只要遍歷所有原始檔,然後計算每一個原始檔有多少行程式碼就行了.下面是詳細的程式碼
using System.IO; //這個是檔案讀寫操作用到的名稱空間
using System.Text.RegularExpressions; //這個是正則表示式名稱空間
int totalSourceCodeLines = 0; //定義個全域性變數
public int GetsourceCodeLins(string projectPath) //引數是原始檔所在的路徑,比如D:\SourceCode\MyCode
{
CalculateTotalCodeLins(projectPath); //呼叫另一個函式
return totalSourceCodeLines;
}
private void CalculateTotalCodeLins(string projectPath)
{
//遍歷所有目錄
DirectoryInfo dir = new DirectoryInfo(projectPath);
foreach (DirectoryInfo dirInfo in dir.GetDirectories())
CalculateTotalCodeLins(projectPath + "\\" + dirInfo.Name); //遞迴呼叫
遍歷目錄下的所有原始檔
foreach (FileInfo fileInfo in dir.GetFiles())
{
if (Regex.IsMatch(fileInfo.Name, @".*\.(h|cpp)")) //針對不同的原始檔可以用正則表示式篩選,這裡是C++原始檔.
totalSourceCodeLines += CalculateCodeLines(projectPath + "\\" + fileInfo.Name); //呼叫另一個函式計算每個原始檔多少行.
}
}
//計算每個原始檔多少行
private int CalculateCodeLines(string soureFilePath)
{
FileStream fStream = new FileStream(soureFilePath, FileMode.Open);
StreamReader reader = new StreamReader(fStream);
int count = 0;
while (reader.ReadLine() != null)
{
count++;
}
reader.Close();
fStream.Close();
return count;
}
當然這樣計算出來的行數可能不太準確.可以考慮一共多少個原始檔,然後每個原始檔平均有多少行標頭檔案,多少空格.然後減去這些行數就相對比較準確了。