//
// main.m
// 計算代碼行數
//
// Created by waka on 15/7/9.
// Copyright (c) 2015年 OC. All rights reserved.
//
#import <Foundation/Foundation.h>
NSInteger codeLineCount(NSString *path)// 計算文件夾代碼函數
{
// 獲得 文件管理者
NSFileManager *mgr = [NSFileManager defaultManager];
// 判斷 path 是文件 還是 文件夾
BOOL dir = NO;// yes 是文件夾 no 不是文件夾
// 判斷 文件(夾) 是否存在
BOOL exist = [mgr fileExistsAtPath:path isDirectory:&dir];
if(!exist)
{
NSLog(@"輸入有誤!");
return 0;// 輸入的文件不存在 結束
}
if (dir)
{// 是文件夾
NSArray *array = [mgr contentsOfDirectoryAtPath:path error:nil]; // 把當前文件/夾 裏的東西放到一個數組裏
int count = 0;// 計代碼數
for (NSString *fileName in array)// 遍歷數組裏的所有文件/夾
{
// 獲得 子文件/夾 的 全路徑
NSString *fullPath = [NSString stringWithFormat:@"%@/%@",path,fileName];
count += codeLineCount(fullPath); // 遞歸調用~
}
return count;
}
else
{// 不是文件夾
//判斷 文件擴展名 (把 字符 都轉化成 小寫 好判斷~)
NSString *extension = [[path pathExtension] lowercaseString];
if (![extension isEqualToString:@"h"]&&![extension isEqualToString:@"m"])// 計算.h 和 .m 的
{
//NSLog(@"文件有誤!");
return 0;
}
// 加載文件內容
NSString *content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
//NSLog(@"%@",content);
// 計算 有多少個換行
NSArray *array = [content componentsSeparatedByString:@"\n"];// 函數意思是 把文件 按 什麼(@“...”) 分割
// 遍歷 每一行 輸出
// int i=0;
// for (NSString *line in array)
// {
// NSLog(@"%d--%@",i,line);
// i++;
// }
// 覺得 輸出的文件路徑太長
NSRange range = [path rangeOfString:@"/Users/waka/Documents/Objective-c/"];// 獲得指定搜索的文件夾
NSString *str = [path stringByReplacingCharactersInRange:range withString:@""]; // 把路徑輸出爲 空
NSLog(@"%@ - %ld",str,array.count); // 打印 文件路徑及 單個文件代碼行數
return array.count;
}
}
<pre name="code" class="objc">int main( )
{
NSInteger count = codeLineCount(@"/Users/waka/Documents/Objective-c/");// 輸入 要查的文件夾路徑
NSLog(@"%ld",count);
return 0;
}