计算代码行数

//计算代码行数
#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;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值