-Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
计算代码总行数
思路:1.判断给出的路径是文件还是文件夹
2.如果是文件,用\n把文件分割成一个数组,计算数组元素个数就可以得出文件总行数
如果是文件夹,获得文件夹的所有内容,包括文件和文件夹,然后有递归算出文件夹所有代码的总行数
考察内容:NSString、NSArray、NSFileManager的使用
代码演示:
#import <Foundation/Foundation.h> NSUInteger codeLineCount(NSString *path); int main() { NSUInteger count = codeLineCount(@"/Users/fengze/Desktop"); NSLog(@"%ld",count); return 0; } NSUInteger codeLineCount(NSString *path) { //1.获取文件管理者 NSFileManager *mgr = [NSFileManager defaultManager]; //2.标记是否为文件夹 BOOL dir = NO; //标记这个路径是否存在 BOOL exist = [mgr fileExistsAtPath:path isDirectory:&dir]; //3.如果不存在,直接返回0 if (!exist) { NSLog(@"文件不存在!!!"); return 0; } if (dir) {//文件夹 //获得当前文件夹path下面的所有内容(文件夹、文件) NSArray *array = [mgr contentsOfDirectoryAtPath:path error:nil]; //定义一个变量保存path中所有文件的总行数 int count = 0; // 遍历数组中的所有文件(夹)名 for(NSString *fileName in array) { //获得子文件(夹)的全路径 NSString *fullPath = [NSString stringWithFormat:@"%@%@",path,fileName]; //累加每个子路径的总行数 count += codeLineCount(fullPath); } return count; } else {//文件 //判断文件的拓展名(忽略大小写) NSString *extension = [[path pathExtension] lowercaseString]; if(!([extension isEqualToString:@"h"] &&[extension isEqualToString:@"c"] &&[extension isEqualToString:@"m"])) { //文件拓展名不是h,c,m return 0; } // 加载文件内容 NSString *content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil]; //将文件内容切割为每一行 NSArray *array = [content componentsSeparatedByString:@"\n"]; //删除文件路径前面的/Users/fengze/Desktop/练习/ NSRange range = [path rangeOfString:@"/Users/fengze/"]; NSString *str = [path stringByReplacingCharactersInRange:range withString:@""]; //打印文件路径和行数 NSLog(@"%@ - %ld",str,array.count); return array.count; } }
时间: 2024-10-06 07:07:05