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. 详解MemCached原理

    memcached是一个高性能的分布式内存缓存服务器,memcached在Linux上可以通过yum命令安装,这样方便很多,在生产环境下建议用Linux系统,memcached使用libevent这个 ...

  2. selenium webdriver (python) 第一版PDF

    前言 如果你是一位有python语言基础的同学,又想通过python+ selenium去实施自动化,那么你非常幸运的找到了这份文档,我也非常荣幸能为你的自动化学习之路带来一丝帮助. 其实,我在sel ...

  3. 使用 CSS3 打造一组质感细腻丝滑的按钮

    CSS3 引入了众多供功能强大的新特性,让设计和开发人员能够轻松的创作出各种精美的界面效果.下面这些发出闪亮光泽的按钮,很漂亮吧?把鼠标悬停在按钮上,还有动感的光泽移动效果. 温馨提示:为保证最佳的效 ...

  4. MyEclipse搭建SSM框架(Spring+MyBatis+SpringMVC)

    待写. 参考网址 http://www.cnblogs.com/Joetao/articles/4544572.html http://www.cnblogs.com/verlen11/p/53497 ...

  5. dp --- Codeforces 245H :Queries for Number of Palindromes

    Queries for Number of Palindromes Problem's Link:   http://codeforces.com/problemset/problem/245/H M ...

  6. 使用SQLite数据库和Access数据库的一些经验总结

    在我的<Winform开发框架>中,可使用多种数据库作为程序的数据源,除了常规的Oracle数据库.SqlServer.MySql数据库,其中还包括了SQLite数据库.Access数据库 ...

  7. ViewData和TempData以及Session的小结

    ViewData一般用在从控制器向页面上传递数据. Public ActionResult Show() { ViewData["message"]="你好"; ...

  8. c#开发工具软件集合

    visual studio 2015(自带Nuget) Resharper de4dot dnspy ILMergeGui Git 大漠插件3.1233 天使插件v4.019 Navicat_Prem ...

  9. 重新想象 Windows 8 Store Apps (44) - 多线程之异步编程: 经典和最新的异步编程模型, IAsyncInfo 与 Task 相互转换

    [源码下载] 重新想象 Windows 8 Store Apps (44) - 多线程之异步编程: 经典和最新的异步编程模型, IAsyncInfo 与 Task 相互转换 作者:webabcd 介绍 ...

  10. 重新想象 Windows 8 Store Apps (53) - 绑定: 与 ObservableCollection CollectionViewSource VirtualizedFilesVector VirtualizedItemsVector 绑定

    [源码下载] 重新想象 Windows 8 Store Apps (53) - 绑定: 与 ObservableCollection CollectionViewSource VirtualizedF ...