注意:

1.变量名和函数名不要混淆调用
2.不要对文件夹进行文件的操作,没有权限
3.递归调用注意初始化变量
 
 //
// main.m
// CodeLineCount
//
// Created by hellovoidworld on 14-11-18.
// Copyright (c) 2014年 com.hellovoidworld. All rights reserved.
// #import <Foundation/Foundation.h> // 计算文件夹或文件内所有代码行数
NSInteger codeLineCount(NSString *path)
{
NSError *error; // 单例模式创建 NSFileManager
NSFileManager *fileManager = [NSFileManager defaultManager]; BOOL isDirectory = NO;
BOOL isFileExist = [fileManager fileExistsAtPath:path isDirectory:&isDirectory]; // 文件是否存在
if (!isFileExist)
{
NSLog(@"%@-->文件或文件夹不存在!", path);
return ;
} // 如果是文件夹,进行递归调用
if (isDirectory)
{
// NSLog(@"文件夹: %@", path); NSInteger lineCount = ; // 代码行数 // 获取文件夹下的所有内容,包括子文件夹和文件
NSArray *subPaths = [fileManager contentsOfDirectoryAtPath:path error:&error]; if (error != nil)
{
NSLog(@"Fail to read the directory, the error is %@", error);
} for (NSString *subPath in subPaths)
{
NSString *fullSubPath; // 全路径的文件名
fullSubPath = [NSString stringWithFormat:@"%@/%@", path, subPath]; // 取出来的文件名不带路径
lineCount += codeLineCount(fullSubPath);
} return lineCount;
}
else
{
NSInteger lineCount = ; // 代码行数 // 取得文件扩展名
NSString *fileExtension = [[path pathExtension] lowercaseString]; // 过滤非代码文件
if (![fileExtension isEqualToString:@"h"]
&& ![fileExtension isEqualToString:@"m"]
&& ![fileExtension isEqualToString:@"c"])
{
return ;
} NSString *fileContent = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:&error]; if (error != nil)
{
NSLog(@"Read fail, error is %@", error);
} NSArray *codeLinesArray = [fileContent componentsSeparatedByString:@"\n"];
lineCount = [codeLinesArray count]; NSLog(@"%@的代码行数是%ld", path, lineCount);
return lineCount;
}
} int main(int argc, const char * argv[]) {
@autoreleasepool { NSInteger lineCount = codeLineCount(@"/Users/hellovoidworld/Study");
NSInteger lineCount2 = codeLineCount(@"/Users/hellovoidworld/Desktop/oc"); NSLog(@"所有源码文件的总行数是%ld", lineCount + lineCount2); } return ;
}

[OC Foundation框架 - 20] 统计代码行数的更多相关文章

  1. Eclipse统计代码行数

    开发过程中,经常需要统计代码行数,这时可以通过Eclipse的Search功能来实现. 步骤: 1.在Package Explorer中选中需要统计的包: 2.单击菜单Search-->File ...

  2. 在Flash Builder或者Eclipse统计代码行数的方法

    在Flash  Builder或者Eclipse统计代码行数的方法如下图菜单栏--搜索--搜索文件

  3. 【Linux】常用命令-统计代码行数

    公司人员流动大,经常有新的维护任务,交接时喜欢看看新来的模块的代码量,那么问题来了, 如何统计代码行数? 1,最先想到的肯定是 wc. wc -l *.h 将查看[当前目录]下头文件的代码行数,输出结 ...

  4. c#统计代码行数

    小编,已经快学了两年编程了.昨天突发奇想,想统计下这些年到底写过多少行代码,于是做了一个这个小程序来统计代码行数.老规矩,先上图. 比较惭愧,写了两年只有2万多行.那我们还是进入下一项吧. 界面搭建我 ...

  5. 【未解决】对于使用Windows的IDEA进行编译的文件,但无法在Linux系统中统计代码行数的疑问

    在我学习使用Windows的IDEA的过程中,将代码文件转移到Linux虚拟机当中,但无法在Linux系统中统计代码行数. 注意:拷贝进虚拟机的文件均能编译运行. 具体过程如下: root@yogil ...

  6. Visual Studio 统计代码行数

    介绍一种简单的统计代码行数的小技巧, 使用正则表达式,用VS强大的查找功能 b[^:b#/]+.$ 最后结果:

  7. 用django统计代码行数+注释行数

    实现统计代码行数: 1.首先在url.py中配置 from django.conf.urls import url from django.contrib import admin from app0 ...

  8. cloc 统计代码行数工具

    cloc 统计代码行数工具 官网地址:http://cloc.sourceforge.net/ 下载完成后 会生成一个.exe文件 需要修改文件名为 cloc.exe 然后把这个文件拷贝到需要统计的根 ...

  9. python统计代码行数

    以前写了一个java的统计代码行数的小程序,最近在看python,于是就参考前辈的代码,写了一个统计文件夹下面各种程序的代码的小程序,这里贴出来供大家参考 参考链接: https://gist.git ...

随机推荐

  1. hbase 使用备忘

    hbase是基于hadoop的,所以hbase服务器必须启动hadoop,这点很重要. 当然hbase其实只用到了dadoop的一个组件 1. 启动hadoop-dfs 在主上执行如下命令,可以把主和 ...

  2. 【NOIP 2016 总结】

    距离杯赛已经很久了,然而我现在才打总结.. 我好惨的说..两场才380... DAY 1 第一题 toy 送分题,模拟的时候+一下再mod一下就好. [当时打完这题就没再看一眼了,好方的说] #inc ...

  3. WCF实例上下文

    实例上下文模式(IntanceContext Mode)表示服务端的服务实例与客户端的服务代理的绑定方式. 在WCF中有三种不同的实例上下文模式,单调(Per-Call)模式,会话(Per-Sessi ...

  4. HDU4614【线段树。】

    果然看了理解了一下大牛的代码然后自己敲结果果然有不少错误 回复说,线段树做为一种数据结构,最好以一种风格过一题裸的然后作为自己的模板.. 二分写的也很恶心哪 还有题目稍复杂一点的注定得推敲各种公式,不 ...

  5. 功能齐全、效率一流的免费开源数据库导入导出工具(c#开发,支持SQL server、SQLite、ACCESS三种数据库),每月借此处理数据5G以上

    软件名:DataPie 功能:支持SQL server.SQLite.ACCESS数据库的导入.导出.存储过程调用,支持EXCEL2007.EXCEL2003.ACCESS2007. CSV文件导入数 ...

  6. 2.1 linux中uboot移植

    -- --------------------------------------------------------------------------------------- (一)友善之臂介绍 ...

  7. C# 框架是什么?MVC是什么 ?工厂模式是什么?设计模式是什么?三层架构是什

    C# 框架是什么?MVC是什么 ?工厂模式是什么?设计模式是什么?三层架构是什么?如果要学我该从何学起??? C# 框架看这里http://download.csdn.net/source/25784 ...

  8. 使用Spring框架的12个开源项目

    使用Spring框架的12个开源项目 http://www.csdn.net/article/2013-10-14/2817176-open-source-projects-that-use-spri ...

  9. bzoj3203

    好题,我们先来考虑第i关,要能打死所有僵尸的攻击力得要满足什么条件我们设排头的是第i个僵尸,植物这关攻击力为yi不难得到对于第j个僵尸,植物开始打到他时,他离房子的距离为xi+(i-j)*d-(sum ...

  10. SpringContextHolder 静态持有SpringContext的引用(如何取得Spring管理的bean )

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...