/*
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
*/