/*
考察NSString , NSArray的使用
NSFileManager
返回值 int : 代码行数
*/
#import
// 计算单个文件代码行数
/*
path : 文件的全路径(可能是文件夹路径 / 也可能是文件)
返回值 int : 代码行数
*/
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;
}