1、先解决如何获取一个文件的代码行数

一开始对于这个问题,我的思路就回荡在:1字符串子字符串的判断 2循环直到结束的想法 3将原来是"\n"替换掉之类的想法

一个问题总会有多种解决方案,下面的解决方案来自MJ基础视频里讲过的方案,挺不错的,基本思路是:通过"\n"拆分字符串到OC数组中,最后判断数组的长度即可。

虽然有时候我们可能想不到更好的方法,但是也不能阻拦我们去积累好的方法,所以纪录在此博文中。

学习来自 MJ 的某个基础视频

 2、然后进一步考虑一个目录下的所有文件以及目录下的子文件的行数
思路:<1>这样的话,首先要处理 path 可以是文件所在目录,也可以是文件夹所在的目录。所以就需要NSFileManager对象来处理文件和文件夹。
  NSFileManager可以判断当前目录是对应的文件还是文件夹。
<2>当如果是文件的话,就执行上面的程序,输出文件的行数。
<3>当如果是文件夹的话,就需要继续执行方法<1>所以这里就需要用递归来处理这种需要重复执行包含的内容。
下面就直接给出MJ的代码:
 #import <Foundation/Foundation.h>

 void codeLine(NSString *path)
{
//需要获取的内容
NSString* content;
//获取NSFileManager的单例对象
NSFileManager *manager = [NSFileManager defaultManager];
//判断path是文件还说路径
BOOL isDir;//是否为文件夹
BOOL isExist = [manager fileExistsAtPath:path isDirectory:&isDir];//是否存在 if (!isExist) {
NSLog(@"路径下的目录或文件 不存在的");
} if (isDir) {
NSLog(@"是目录文件夹。");
//就需要打印所有的子文件夹
NSArray *dirArray = [manager contentsOfDirectoryAtPath:path error:nil];
//遍历数组中所有的文件和目录
for (NSString* fileName in dirArray) {
NSString* fileNames = [NSString stringWithFormat:@"%@/%@",path,fileName];
NSLog(@"%@",fileNames);
//然后递归调用,遇到文件名就输出行数
codeLine(fileNames);
}
}else{
content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
NSArray *array = [content componentsSeparatedByString:@"\n"];
//获取文件的行数
NSLog(@"行数是:%lu",(unsigned long)array.count);
}
} int main(int argc, const char * argv[]) {
@autoreleasepool {
// /Users/HeYang/Desktop/HTTP
NSString* path = @"/Users/HeYang/Desktop/HTTP";
codeLine(path);
}
return ;
}

3、然后进一步解决的问题是:文件为后缀.h .m .c的文本

 #import <Foundation/Foundation.h>

 int codeLine(NSString *path)
{
//需要获取的内容
NSString* content;
//获取NSFileManager的单例对象
NSFileManager *manager = [NSFileManager defaultManager];
//判断path是文件还说路径
BOOL isDir;//是否为文件夹
BOOL isExist = [manager fileExistsAtPath:path isDirectory:&isDir];//是否存在 if (!isExist) {
NSLog(@"路径下的目录或文件 不存在的");
return ;
}
NSArray *array;
NSString *fullFileName;
if (isDir) {
//就需要打印所有的子文件夹
NSArray *dirArray = [manager contentsOfDirectoryAtPath:path error:nil];
//遍历数组中所有的文件和目录
for (NSString* fileName in dirArray) {
fullFileName = [NSString stringWithFormat:@"%@/%@",path,fileName];
//然后递归调用,遇到文件名就输出行数
codeLine(fullFileName);
}
return ;
}else{
//还需要判断非指定文件名后缀的文件
NSString *extends = [path pathExtension];
if (![extends isEqualToString:@"h"]
&& ![extends isEqualToString:@"c"]
&& ![extends isEqualToString:@"m"]){
return ;
}
content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
array = [content componentsSeparatedByString:@"\n"];
}
NSLog(@"%@ 的行数是:",path);
//获取文件的行数
NSLog(@"行数是:%lu",(unsigned long)array.count);
return ;
} int main(int argc, const char * argv[]) {
@autoreleasepool {
// /Users/HeYang/Desktop/HTTP
NSString* path = @"/Users/HeYang/Desktop/HTTP";
codeLine(path);
}
return ;
}
 
 
 
 
 
 
 
 

算法积累:解决如何获取指定文件夹路径或者文件路径下所有子文件后缀为.h .m .c的文本的行数的更多相关文章

  1. Win7系统用户文件夹多出一个Administrator.xxx开头的文件怎么解决

    一般情况下,Win7操作系统都会有一个Administrator用户文件夹,但最近有用户发现自己win7系统电脑中用户文件夹有两个Administrator文件夹,另一个是以Administrator ...

  2. Python获取当前脚本文件夹(Script)的绝对路径

    Python获取当前脚本绝对路径 Python脚本有一个毛病,当使用相对路径时,被另一个不同目录下的py文件中导入时,会报找不到对应文件的问题.感觉是当前工作目录变成了导入py文件当前目录.如果你有配 ...

  3. 【转载】C#指定文件夹下面的所有内容复制到目标文件夹下面

    在涉及到文件夹操作的过程中,有时候需要将文件夹下的所有内容复制拷贝到另一个文件夹,在C#的开发中有时候会遇到这个功能需求将指定文件夹下所有的内容复制到另一个文件夹,这个过程需要遍历所有的文件和目录.此 ...

  4. apache环境下禁止某文件夹内运行PHP脚本、禁止访问文件或目录执行权限的设置方法

    apache环境下禁止某文件夹内运行PHP脚本.禁止访问文件或目录执行权限的设置方法   首先我们来看两段对上传目录设置无权限的列子,配置如下: <Directory "要去掉PHP执 ...

  5. Java扫描指定文件路径下的文件并且递归扫描其子目录下的所有文件

    本文主要实现了扫描指定文件路径下的文件,递归扫描其子目录下的所有文件信息,示例文件为: 要求将后缀为.dat的文件夹信息也写入到数据库中,然后将.chk文件解析,将文件中对应的内容读出来写入到数据库, ...

  6. Path,Files巩固,题目:从键盘接收两个文件夹路径,把其中一个文件夹中(包含内容)拷贝到另一个文件夹中

    这个题目用传统的File,InputStream可以做,但是如果用Files,Path类做,虽然思路上会困难一些,但是代码简洁了很多,以下是代码: import java.io.IOException ...

  7. [R语言]读取文件夹下所有子文件夹中的excel文件,并根据分类合并。

    解决的问题:需要读取某个大文件夹下所有子文件夹中的excel文件,并汇总,汇总文件中需要包含的2部分的信息:1.该条数据来源于哪个子文件夹:2.该条数据来源于哪个excel文件.最终,按照子文件夹单独 ...

  8. C#压缩文件夹至zip,不包含所选文件夹【转+修改】

    转自园友:jimcsharp的博文C#实现Zip压缩解压实例[转] 在此基础上,对其中的压缩文件夹方法略作修正,并增加是否对父文件夹进行压缩的方法.(因为笔者有只压缩文件夹下的所有文件,却不想将选中的 ...

  9. C#TreeView控件遍历文件夹下所有子文件夹以及文件

    一直对递归的理解不深刻,有时候觉得很简单,可是用起来总会出错.这里需要在TreeView控件里显示一个文件夹下的所有目录以及文件,毫无意外的需要用到递归. 一开始,想到用递归写一个生成每一个节点(Tr ...

随机推荐

  1. Direct2D开发:纹理混合

    转载请注明出处:http://www.cnblogs.com/Ray1024 一.概述 我们都知道Direct2D可以加载并显示图片,但是不知道你有没有想过,这个2D的图形引擎可以进行纹理混合吗?如果 ...

  2. Direct3D11学习:(五)演示程序框架

    转载请注明出处:http://www.cnblogs.com/Ray1024 一.概述 在此系列最开始的文章Direct3D11学习:(一)开发环境配置中,我们运行了一个例子BoxDemo,看过这个例 ...

  3. onhashchange事件,只需要修改hash值即可响应onhashchange事件中的函数(适用于上一题下一题和跳转页面等功能)

    使用实例: 使用onhashchange事件做一个简单的上一页下一页功能,并且当刷新页面时停留在当前页 html: <!DOCTYPE html><html><body& ...

  4. .Net魔法堂:史上最全的ActiveX开发教程——ActiveX与JS间交互篇

    一.前言 经过上几篇的学习,现在我们已经掌握了ActiveX的整个开发过程,但要发挥ActiveX的真正威力,必须依靠JS.下面一起来学习吧! 二.JS调用ActiveX方法 只需在UserContr ...

  5. [阅读]个人阅读作业week7

    People-oriented in Agile People-oriented in Agile One Leader Prepare Good ideas from users People-or ...

  6. Scrum项目1.0

    1) N (Need 需求) 面向小学生 2) A (Approach 做法) 3) B (Benefit  好处) 让小学生以游戏的方式进行学习 4) C (Competitors 竞争) 减少练习 ...

  7. PHP--正则表达式和样式匹配--小记

    正则表达式: Regular expression PHP 支持两种风格的函数: POSIX 风格的,有些低版本软件支持,目前高版本的有些已经废弃不用了,比如 zend studio 的较新版本. p ...

  8. C# WinFrom 跨线程访问控件

    1.跨线程访问控件委托和类的定义 using System; using System.Windows.Forms; namespace ahwildlife.Utils { /// <summ ...

  9. 晒自己做的一个管理系统(清新风格)EasyUI

    最近项目结束了,现在也要自己总结一下自己的成果了,总结会加深自己对项目的印象的.这里我就先晒一些作品图片了,希望大家看了会赞美一个! 项目虽然结束了,但是接下来的这个项目可就不是我一个人可以搞定的了, ...

  10. EntityFramework 更新表结构到数据库

    在程序包管理器控制台 1.执行:Enable-Migrations -Force  生成:Migrations 2 修改AutomaticMigrationsEnabled默认为false改为true ...