博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
工具类---OC自定义函数---计算当前路径下所有代码文件的总行数 .c\.h\.m文件的总行数...
阅读量:5363 次
发布时间:2019-06-15

本文共 2083 字,大约阅读时间需要 6 分钟。

 

计算当前路径下所有代码文件的总行数  .c\.h\.m文件的总行数

/*

 计算当前路径下所有代码文件的行数  .c\.h\.m文件的总行数

 涉及到NSArrayNSStringNSFileManager

 */

 

// 计算当前全路径(文件\文件夹)下所有文件的行数

// 接收参数path:文件的全路径(文件、文件夹)

NSUInteger codeLinesCount(NSString *path)

{

    // 1.获得文件管理者    单例模式:整个程序的运行过程中,NSFileManager类的对象只有这一个

    NSFileManager *fmg = [NSFileManager defaultManager];

    

    // 2.判断path是文件夹还是文件路径

    BOOL isDir = NO// 标记是否为文件夹

    // 路径是否存在(有效)

    BOOL isExist = [fmg fileExistsAtPath:path isDirectory:&isDir];

    

    // 3.如果路径不存在,直接返回0退出函数

    if (!isExist)

    {

        NSLog(@"文件路径无效");

        return 0;

    }

    

    // 路径存在

    if (isDir)

    {

        // 是文件夹

        // NSLog(@"是个文件夹");

        // 返回  当前路径(该文件夹)目录下所有(路径)---文件、文件夹路径 列表(数组)

        // 数组元素  并不是全路径

        NSArray *filePathsList = [fmg contentsOfDirectoryAtPath:path error:nil];

        // NSLog(@"%@", filePathsList);

        

        NSUInteger count = 0;   // 行数

        

        // 遍历数组中的所有路径(文件名\文件夹名)

        for (NSString *filePath in filePathsList)

        {

            // 拼接全路径  当前路径文件夹(子文件\子文件夹)的全路径

            NSString *fullPath = [NSString stringWithFormat:@"%@/%@", path, filePath];

            // NSLog(@"%@", fullPath);

            

            /*

             此处 递归

             调用本身  返回  每个最终子文件的行数

             codeLinesCount(fullPath);

             */

            // 把每个最终子路径文件的行数  累加每个子路径的总行数

            count += codeLinesCount(fullPath);    // 精髓

            

        }

        return count;

    }

    else

    {   // 是个文件

        // NSLog(@"是个文件");

        

        /*

          过滤出.c\.h\.m文件

          是个文件  判断文件拓展名

          返回拓展名(忽略大小写---先全部转为小写)

         */

        NSString *extension = [[path pathExtension] lowercaseString];

        // NSLog(@"拓展名为 %@", extension);

        if ( !([extension isEqualToString:@"c"]

              ||[extension isEqualToString:@"h"]

              ||[extension isEqualToString:@"m"]) )

        {

            return 0;

        }

        

        // 1.加载文件内容,到一个字符串对象

        NSString *content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];

        

        // 2.将文件内容(字符串内容)以'\n'每一行进行 切分, 切分好后的内容放入数组 返回

        NSArray *array = [content componentsSeparatedByString:@"\n"];

        

        // 每一个数组元素都是一个NSString对象,就是文件中一行的内容

//        int i = 0;

//        for (NSString *str in array)

//        {

//            i++;

//            NSLog(@"%d---%@",i, str);

//        }

        

        // NSLog(@"文件名:%@ --- 行数:%ld", path, array.count);

        NSString *shortPath = [path stringByReplacingCharactersInRange:[path rangeOfString:@"/Users/Mac/Desktop/"] withString:@" "];

        NSLog(@"文件名:%@ --- 行数:%ld", shortPath, array.count);

        return array.count;     // 数组元素个数就是行数

    }

    

}

转载于:https://www.cnblogs.com/ithmPeak/p/4401414.html

你可能感兴趣的文章
迷宫问题
查看>>
【FZSZ2017暑假提高组Day9】猜数游戏(number)
查看>>
泛型子类_属性类型_重写方法类型
查看>>
练习10-1 使用递归函数计算1到n之和(10 分
查看>>
Oracle MySQL yaSSL 不明细节缓冲区溢出漏洞2
查看>>
Code Snippet
查看>>
zoj 1232 Adventure of Super Mario
查看>>
组合数学 UVa 11538 Chess Queen
查看>>
Redis常用命令
查看>>
[转载]电脑小绝技
查看>>
thinkphp如何实现伪静态
查看>>
BZOJ 1925: [Sdoi2010]地精部落( dp )
查看>>
c++中的string常用函数用法总结!
查看>>
Week03-面向对象入门
查看>>
一个控制台程序,模拟机器人对话
查看>>
Vue 2.x + Webpack 3.x + Nodejs 多页面项目框架(上篇——纯前端多页面)
查看>>
我的PHP学习之路
查看>>
【题解】luogu p2340 奶牛会展
查看>>
解决响应式布局下兼容性的问题
查看>>
使用DBCP连接池对连接进行管理
查看>>