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

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

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

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

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

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


2、然后进一步考虑一个目录下的所有文件以及目录下的子文件的行数

思路:<1>这样的话,首先要处理 path 可以是文件所在目录,也可以是文件夹所在的目录。所以就需要NSFileManager对象来处理文件和文件夹。

  NSFileManager可以判断当前目录是对应的文件还是文件夹。

<2>当如果是文件的话,就执行上面的程序,输出文件的行数。

<3>当如果是文件夹的话,就需要继续执行方法<1>所以这里就需要用递归来处理这种需要重复执行包含的内容。

下面就直接给出MJ的代码:

 1 #import <Foundation/Foundation.h>
 2  3 void codeLine(NSString *path)
 4 {
 5 //需要获取的内容  6 NSString* content;
 7 //获取NSFileManager的单例对象  8 NSFileManager *manager = [NSFileManager defaultManager];
 9 //判断path是文件还说路径 10 BOOL isDir;//是否为文件夹 11 BOOL isExist = [manager fileExistsAtPath:path isDirectory:&isDir];//是否存在 12 13 if (!isExist) {
14 NSLog(@"路径下的目录或文件 不存在的");
15  }
16 17 if (isDir) {
18 NSLog(@"是目录文件夹。");
19 //就需要打印所有的子文件夹 20 NSArray *dirArray = [manager contentsOfDirectoryAtPath:path error:nil];
21 //遍历数组中所有的文件和目录 22 for (NSString* fileName in dirArray) {
23 NSString* fileNames = [NSString stringWithFormat:@"%@/%@",path,fileName];
24 NSLog(@"%@",fileNames);
25 //然后递归调用,遇到文件名就输出行数 26  codeLine(fileNames);
27  }
28 }else{
29 content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
30 NSArray *array = [content componentsSeparatedByString:@"\n"];
31 //获取文件的行数 32 NSLog(@"行数是:%lu",(unsigned long)array.count);
33  }
34 }
35 36 int main(int argc, const char * argv[]) {
37  @autoreleasepool {
38 // /Users/HeYang/Desktop/HTTP 39 NSString* path = @"/Users/HeYang/Desktop/HTTP";
40  codeLine(path);
41  }
42 return 0;
43 }


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

 1 #import <Foundation/Foundation.h>
 2  3 int codeLine(NSString *path)
 4 {
 5 //需要获取的内容  6 NSString* content;
 7 //获取NSFileManager的单例对象  8 NSFileManager *manager = [NSFileManager defaultManager];
 9 //判断path是文件还说路径 10 BOOL isDir;//是否为文件夹 11 BOOL isExist = [manager fileExistsAtPath:path isDirectory:&isDir];//是否存在 12 13 if (!isExist) {
14 NSLog(@"路径下的目录或文件 不存在的");
15 return 0;
16  }
17 NSArray *array;
18 NSString *fullFileName;
19 if (isDir) {
20 //就需要打印所有的子文件夹 21 NSArray *dirArray = [manager contentsOfDirectoryAtPath:path error:nil];
22 //遍历数组中所有的文件和目录 23 for (NSString* fileName in dirArray) {
24 fullFileName = [NSString stringWithFormat:@"%@/%@",path,fileName];
25 //然后递归调用,遇到文件名就输出行数 26  codeLine(fullFileName);
27  }
28 return 0;
29 }else{
30 //还需要判断非指定文件名后缀的文件 31 NSString *extends = [path pathExtension];
32 if (![extends isEqualToString:@"h"]
33 && ![extends isEqualToString:@"c"]
34 && ![extends isEqualToString:@"m"]){
35 return 0;
36  }
37 content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
38 array = [content componentsSeparatedByString:@"\n"];
39  }
40 NSLog(@"%@ 的行数是:",path);
41 //获取文件的行数 42 NSLog(@"行数是:%lu",(unsigned long)array.count);
43 return 0;
44 }
45 46 int main(int argc, const char * argv[]) {
47  @autoreleasepool {
48 // /Users/HeYang/Desktop/HTTP 49 NSString* path = @"/Users/HeYang/Desktop/HTTP";
50  codeLine(path);
51  }
52 return 0;
53 }

时间: 2024-08-04 07:15:56

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

我想实现文件和文件夹的打包,只要能打包成一个文件就可以.

问题描述 我想要一个能够实现将一个文件夹打包的类,我能把文件打包,但是文件夹怎么操作??没分了求求大哥们给小弟点建议啊.郁闷 解决方案 解决方案二:文件夹啊,为什么非要打包呢,你可以在程序里面处理啊在访问的时候判断一下啊,如果有就继续,没有就创建一个好了,你说呢解决方案三:我是想实现文件夹的整体上传,有两种方法:一是边历整个文件夹然后在服务器上创建目录,再吧响应的文件传到目录里.第二中:把文件夹压缩,然后整体上传到指定的位置,在接压缩.解决方案四:你可以去网上先查一下支持文件夹打包的可用第三方D

将windows下的文件夹挂载到linux虚拟机下

  如何将windows下的文件夹挂载到linux虚拟机下 这里的挂载,指的是linux虚拟机可以访问windows系统的指定文件夹,http://包括读写. 以下挂载方式,需要安装VMware Tools.安装VMware Tools,右键点击你要启动的linux虚拟机,会弹出一个右键菜单,在其中会有一个install VMware Tools.点击该选项,则在linux系统中会打开一个目录,该目录下有一个VMware Tools安装包的压缩文件.解压缩该文件,会发现里面有一个vmware-i

电脑不能显示所有文件夹 提示:无法更改显示所有的文件和文件夹

  因为在设置用户帐户时,操作不当,创建了一个新帐户,把Adminstrator管理员帐户给删除了,用新帐户代替了,当时感觉没问题,后来发现,原来个人配置全部都丢失了,要全部找回不太可能了,但想找回一部份个人配置,进入C盘,发现要找的文件都是隐藏的,只好去解除系统隐藏属性,但发现"显示所有的文件和文件夹"改不了,改好后,又变回去了,查找了好多资料,才把这个问题解决. 1 ,要修改系统文件隐藏功能,必须进入"文件夹选项",进入方法,系统窗口,单击菜单栏"工具

asp.net遍历文件夹下所有子文件夹并绑定到gridview上的方法_实用技巧

遍历文件夹下所有子文件夹,并且遍历配置文件某一节点中所有key,value并且绑定到GridView上 Helper app_Helper = new Helper(); DataSet ds = new DataSet(); DataTable dt = new DataTable(); protected void Page_Load(object sender, EventArgs e) { gvwBind(); } #region 绑定GridView /// <summary> //

c#net-c# 根据文件夹名称删除盘符下文件

问题描述 c# 根据文件夹名称删除盘符下文件 e盘下有录像文件,每天新建一个文件夹,名称格式如下"yyyyMMdd", 我想做个程序,根据当前时间判断文件名,删除三天前的文件夹,求大神帮忙!!新号没分,好人平安 解决方案 C#修改文件或文件夹名称 .C#修改文件或文件夹名称C# 删除指定文件夹下的文件

c++-关于C++新建文件夹的问题(路径带有变量)

问题描述 关于C++新建文件夹的问题(路径带有变量) 新人初学C++遇到一些问题, 我想在某个目录下新建一个文件夹,但是这个文件夹名称是一个string类型的变量. 我想把他用来当作文件夹名称,我试过system函数的mkdir,但是里面不能放入变量作为路径 用CreateDirectory这个函数的话,里面的路径无法填入string类型的路径,转换为cstring类型后, 新字符串和原字符串变掉了,请问改如何处理? 谢谢! 部分代码 void SaveQR() { QRreader(); //

android studio引用assets文件夹里的东西路径怎么写

问题描述 android studio引用assets文件夹里的东西路径怎么写 在eclipse中路径是file:///android_asset/kaka.swf,在android studio中assets是新建出来的,也是这样引用么? 解决方案 1.目录问题 在Eclispe中,这个目录的位置在res/下面,但到了Android Studio中,这个assets目录必须放在跟java和res同级目录下 2.读取的方法 context.getClass().getClassLoader().

WP7获取ISolatedStorage指定文件夹下所有子文件夹

进入正题: 一开始直接使用GetDirectoryNames("folder") string[] folderlist; IsolatedStorageFile iso = IsolatedStorageFile.GetUserStoreForApplication(); if(iso.DirectoryExists("folder")) { folderlist=iso.GetDirectoryNames("folder"); } 运行后发现

t 遍历文件夹 ile nfo-急求使用Qt遍历打开文件夹,并把所有子文件的路径显示在ListWidget中,求大神帮忙!

问题描述 急求使用Qt遍历打开文件夹,并把所有子文件的路径显示在ListWidget中,求大神帮忙! bool StyleBatch::findFilePath(QString path){ QDir dir(path);if (!dir.exists()) return 0;dir.setFilter(QDir::Dirs|QDir::Files);dir.setSorting(QDir::DirsFirst);QFileInfoList list = dir.entryInfoList();