#import <Foundation/Foundation.h>
// 計算單個檔案代碼行數
int codeLineCount(NSString *path)
{
// 1.獲得檔案管理者
NSFileManager *mgr = [NSFileManagerdefaultManager];
// 2. 判斷path是檔案夾還是檔案路徑
BOOL dir = NO; // 标記是否為檔案夾
// 這個路徑是否存在
BOOL exist = [mgr fileExistsAtPath:path isDirectory:&dir];
// 3 . 如果不存在 , 直接傳回 0
if ( !exist ) return 0;
// 4 . 說明路徑存在
if (dir)
{ // 是檔案夾
// NSLog(@"是個檔案夾");
// 裝着目前檔案夾這面的所有内容 (檔案夾 , 檔案)
NSArray *array = [mgr contentsOfDirectoryAtPath:path error:nil];
// NSLog(@"%@",array);
int count = 0;
// 周遊數組中的所有檔案 (夾) 名
for (NSString *filenamein array)
{
// 子檔案 (夾) 的全路徑
NSString *fullPath = [NSStringstringWithFormat:@"%@/%@",path,filename];
// NSLog(@"%@",fullPath);
// 累加每個子路徑的總行數
count += codeLineCount(fullPath);
}
return count;
}
else
{ // 檔案
// 1 . 判斷檔案的拓展名 ( 忽略大小寫 )
NSString *extension = [[path pathExtension] lowercaseString];
if( ! [extension isEqualToString:@"h"] && [extension isEqualToString:@"m" ] && [extension isEqualToString:@"c"])
{
// 檔案拓展名不是.h, 也不是.m ,而且也不是.c
return 0;
}
// NSLog(@"%@",extension);
// 2.加載檔案内容
NSString *content = [NSStringstringWithContentsOfFile:path encoding:NSUTF8StringEncodingerror:nil];
// NSLog(@"%@",content);
// 3.将檔案切割為每一行
NSArray *array = [content componentsSeparatedByString:@"\n"];
NSRange range = [pathrangeOfString:@"/Users/yahua/Desktop/Work/"];
// 将備援的路徑range 不顯示在輸出檔案中
NSString *str = [pathstringByReplacingCharactersInRange:range withString:@""];
NSLog(@"%@ - %ld",str , array.count);
return array.count;
}
}
int main(int argc,const char * argv[]) {
//codeLineCount輸入你檔案 (夾) 路徑
int count =codeLineCount(@"/Users/yahua/Desktop/Work/");
NSLog(@"%d",count);
return 0;
}