Foundation框架之计算代码行数
文章开始把我喜欢的这句话送个大家:这个世界上还有什么比自己写的代码运行在一亿人的电脑上更酷的事情吗,如果有那就是让这个数字再扩大十倍
//
// test_codeLineCount.m
//
//
// Created by MacBook on 2018/9/23.
//
#import <Foundation/Foundation.h>
/*
//计算单个文件的行数
NSUInteger codeLineCount(NSString *path)
{
//读出文件的内容
NSString *str =[NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
//输出字符串内容进行验证 是否正确读出文件内容
NSLog(@"%@",str);
//将读出的文件内容一'\n'分开
NSArray *array = [str componentsSeparatedByString:@"\n"];
for( NSString *obj in array)
{
NSLog(@"%@",obj);
}
return array.count;
}
*/
//计算某个文件夹下所有文件的行数
NSInteger codeLineCount(NSString *path)
{
//新建一个文件管理者,单例对象
NSFileManager *mgr = [NSFileManager defaultManager];
BOOL dir = NO;
//判断传入的路径是否是一个文件
BOOL exist = [mgr fileExistsAtPath:path isDirectory:&dir];
if(!exist)
{
//文件不存在 退出程序
NSLog(@"文件不存在");
return 0;
}
//路径合理 判断路径是一个文件还是文件夹
if(dir == YES)
{
int count = 0;//该文件夹中得文件数为0
//这是一个文件夹
//读取这个文件夹中得文件 存放于数组之中
NSArray *array = [mgr contentsOfDirectoryAtPath:path error:nil];
//输出这个数组中得内容
for(NSString *filename in array)
{ //输出其路径
//NSLog(@"%@%@",path,filename);
//拼接成全路径
NSString *fullpath = [NSString stringWithFormat:@"%@/%@",path,filename];
//递归调用本函数codelinecount计算行数
count += codeLineCount(fullpath);
}
return count;
}
else
{
//只计算后缀为.h .m .c的文件
//取出该文件的后缀
NSString *extension = [[path pathExtension] lowercaseString];
if(![extension isEqualToString:@"m"] && [extension isEqualToString:@"h"] && [extension isEqualToString:@"c"])
{
return 0;
}
//NSLog(@"%@",extension);
//这是一个文件
//读出文件的内容
NSString *str =[NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
//输出字符串内容进行验证 是否正确读出文件内容
// NSLog(@"%@",str);
//将读出的文件内容一'\n'分开
NSArray *array = [str componentsSeparatedByString:@"\n"];
/* for( NSString *obj in array)
{
NSLog(@"%@",obj);
}
*/
//打印出每个文件的 文件名 跟行数
//NSLog(@"%@ %ld",path,array.count);
//上面的方法打印文件路径过于冗余 修改简单
//先计算 荣誉路径的范围
NSRange range = [path rangeOfString:@"/Users/Macbook/Desktop"];
NSString *newpath = [path stringByReplacingCharactersInRange:range withString:@" "];
NSLog(@"%@--%ld",newpath,array.count);
return array.count;
}
}
int main() {
//调用函数
NSUInteger linecount = codeLineCount(@"/Users/Macbook/Desktop");
NSLog(@"%ld",linecount);
return 0;
}
加油吧,程序员。