//计算某个文件夹下所有文件的代码量
NSUInteger codeLineCount(NSString *path)
{
//1.获得文件管理者
NSFileManager *mgr = [NSFileManager defaultManager];
//2.判断path是文件夹还是文件路径
BOOL dir = NO; //标记是否为文件夹
//这个路径是否存在
BOOL exist = [mgr fileExistsAtPath:path isDirectory:&dir];
//3.如果不存在,直接返回0
if(!exist) 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
{//文件
//1.判断文件的扩展名(全部转化为小写,忽略大小写)
NSString *extension = [[path pathExtension] lowercaseString];
if (![extension isEqualToString:@"h"]
&& ![extension isEqualToString:@"m"]
&& ![extension isEqualToString:@"c"])
{
//文件拓展名不是h、m、c,直接退出
return 0;
}
//2.加载文件内容
NSString *content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
//3.将文件内容切割成每一行
NSArray *array = [content componentsSeparatedByString:@"\n"];
//去掉父目录
NSRange range = [path rangeOfString:@"/Users/apple/Desktop/xcode/test/"];
NSString *str = [path stringByReplacingCharactersInRange:range withString:@""];
NSLog(@"%@ ---- %ld", str, array.count);
return array.count;
}
}