main.m
//
// main.m
// calculate_code_line
//
// Created by zhaogang on 16/5/7.
// Copyright © 2016年 zhaogang. All rights reserved.
//
/*
考察NSString、NSArray的使用
NSFileManager
*/
#import <Foundation/Foundation.h>
// 计算单个文件的代码行数
/*
path : 文件的全路径
返回值 : 代码行数
*/
NSUInteger codeLineCount(NSString *path)
{
// 1. 获得文件管理者
NSFileManager *fmgr = [NSFileManager defaultManager];
// 2. 判断path是文件夹还是文件路径
BOOL dir = NO; // 标记是否为文件夹
// 这个路径是否存在
BOOL exist = [fmgr fileExistsAtPath:path isDirectory:&dir];
// 3. 如果不存在,直接返回0
if(!exist) return 0;
// 4. 路径存在
if(dir)
{
//dir
//装着当前文件夹下面的所有内容(文件夹、文件)
NSArray *array = [fmgr contentsOfDirectoryAtPath:path error:nil];
NSUInteger count = 0;
// 遍历数组中的所有文件名
for(NSString *filename in array)
{
//子文件(夹)的全路径
NSString *fullpath = [NSString stringWithFormat:@"%@/%@", path , filename];
// 累加每个子路径的总行数
count += codeLineCount(fullpath);
}
return count;
}
else
{
// file
// 1. 判断文件的拓展名(忽略大小写进行判断)
NSString *extension = [[path pathExtension] lowercaseString];
if(!([extension isEqualToString:@"h"]
|| [extension isEqualToString:@"m"]
|| [extension isEqualToString:@"c"])) // 文件不是.h .m .c
return 0;
// 2. 加载文件内容
NSString *content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
//NSLog(@"%@", content);
// 3. 用'\n'分割content
NSArray *array = [content componentsSeparatedByString:@"\n"];
NSRange range = [path rangeOfString:@"/Users/zzzigo/Desktop/OC_dir/"];
NSString *str = [path stringByReplacingCharactersInRange:range withString:@""];
NSLog(@" %@'s lines is %lu", str , (unsigned long)array.count);
return array.count ;
}
// for ( NSString *line in array)
// {
// NSLog(@"%@", line);
// }
return 0;
}
int main(int argc, const char * argv[]) {
NSUInteger count = codeLineCount(@"/Users/zzzigo/Desktop/OC_dir/");
NSLog(@"count = %lu", (unsigned long)count);
return 0;
}