计算文件/文件夹下代码行数

/*
 1.判断路径是否存在
 2.判断路径是文件夹或者文件
 3.为文件直接输出
 4.为文件夹遍历目录
 */
NSUInteger codeLines(NSString *filePath) {
    //获取文件管理器的单例对象
    NSFileManager *fm = [NSFileManager defaultManager];
    BOOL dir = NO;    //路径是否是文件夹
    BOOL fileExist = [fm fileExistsAtPath:filePath isDirectory:&dir];//路径是否存在
    //1.判断路径是否存在
    if (!fileExist) {
        NSLog(@"文件路径不存在!");
        return 0;
    }
    //2.1路径是文件时
    if(!dir) {
        //获取文件扩展名并转换成小写形式
        NSString *extension = [[filePath pathExtension] lowercaseString];
        if (![extension isEqualToString:@"h"] && ![extension isEqualToString:@"m"] && ![extension isEqualToString:@"c"]) {
            //文件扩展名不是h/m/c时返回0
            return 0;
        }
    
        NSString *contens = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];
        NSArray *arr = [contens componentsSeparatedByString:@"\n"];
        return arr.count;
    //2.2路径是文件夹时
    }else {
        //返回文件夹下的目录,目录名为数组的各个元素
        NSArray *arr = [fm contentsOfDirectoryAtPath:filePath error:nil];
        NSLog(@"文件夹%@目录:%@", filePath,  arr);
        
        int count = 0;
        for (NSString *fileName in arr) {
            NSString *fullPath = [NSString stringWithFormat:@"%@/%@",filePath, fileName];//拼接目录下子文件(夹)的完整路径
            count += codeLines(fullPath);//调用此函数
        }
        return count;
    }
}

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSString *filePath = @"/Users/Kyle/Documents/Foundation框架";
        NSUInteger n1 = codeLines(filePath);
        NSLog(@"总代码行数=%lu", n1);
    }
    return 0;
}
/*
文件夹/Users/Kyle/Documents/Foundation框架/计算单个文件的代码行数目录:(
    ".DS_Store",
    "Line.h",
    "Line.m",
    "main.m",
    newDirectory
)
文件夹/Users/Kyle/Documents/Foundation框架/计算单个文件的代码行数/newDirectory目录:(
    "key.txt"
)
总代码行数=125
*/

推荐阅读更多精彩内容