//计算代码行数
#import <Foundation/Foundation.h>
//计算单个文件的代码行数
/*
用到的内容:
文件管理类
1,NSFileManger:单例
1)路径是否存在,是否是文件夹:- (BOOL)fileExistsAtPath:(NSString *)path isDirectory:(BOOL *)isDirectory
2)返回数组,元素为指定路径下的文件或者文件夹名称:- (NSArray *)contentsOfDirectoryAtPath:(NSString *)path error:(NSError **)error
2,NSString
1)将通过分隔符分隔字符串返回NSArray:- (NSArray *)componentsSeparatedByString:(NSString *)separator
2)获取文件中的内容:+ (instancetype)stringWithContentsOfURL:(NSURL *)url encoding:(NSStringEncoding)enc error:(NSError **)error
*/
/*
path:文件的全路径,可能是文件夹,也可能是文件
返回值int: 返回代码的行数
*/
int codeLineCount(NSString *path)
{
int count = 0 ;
//1,获得文件管理者,为单例
NSFileManager *mgr = [NSFileManager defaultManager];
//2,判断path是文件夹还是文件路径
BOOL dir = NO;//标记是否问文件夹
//返回值有两个:1)isExist这个路径是否存在,2)如果存在是否是文件夹,是则修改dir的值为YES
BOOL isExist = [mgr fileExistsAtPath:path isDirectory:&dir];
//3,如果路径不存在,直接返回0
if(!isExist)
{
NSLog(@"路径不存在");
return 0;
}
//4,文件路径存在
//如果是文件夹
if(dir)
{
NSLog(@"是一个文件夹");
//装着当前文件夹下面的所有内容(文件夹和文件)
//返回数组为文件名和文件夹名
NSArray *array = [mgr contentsOfDirectoryAtPath:path error:nil];
//NSLog(@"%@",array);
//遍历该文件夹下得所有文件夹和文件
for(NSString *fileName in array)
{
//拼接获得当前文件夹下文件或文件夹的全路径
NSString *fullPath = [NSString stringWithFormat:@"%@%@",path,fileName];
count += codeLineCount(fullPath);
}
return count;
}
else
{
//判断文件的扩展名(忽略大小写,都转为小写)
NSString *extension = [[path pathExtension]lowercaseString];
//如果文件扩展名不是.c或者.m或者.h,则退出
if(![extension isEqualToString:@"h"] &&
![extension isEqualToString:@"m"] &&
![extension isEqualToString:@"c"])
return 0;
NSLog(@"是一个文件");
//加载文件内容,每一行通过'\n'分隔
NSURL *url = [NSURL fileURLWithPath:path];
NSString *contents = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
//通过分隔符'\n',将文件切割为一个数组,数组中存放的是每一行的内容
NSArray *array = [contents componentsSeparatedByString:@"\n"];
//遍历每一行数据
for(NSString *str in array)
NSLog(@"%@\n",str);
return array.count;
}
}
int main(int argc, const char * argv[]) {
@autoreleasepool {
int count = codeLineCount(@"/Users/mac/Desktop/11/");
NSLog(@"%d",count);
}
return 0;
}
计算代码行数
最新推荐文章于 2024-06-06 10:14:56 发布