cocos2d-x 实现跨平台的目录遍历

可能各位看官们有更好的方法,请不吝赐教。

#ifdef _WIN32
#include <io.h>
#else
#include <unistd.h>
#include <stdio.h>
#include <dirent.h>
#include <sys/stat.h>
#endif

win32平台引用io.h里面的信息。

主要定义了一个void dfsFolder(string folderPath, int depth = 0);方法对其进行递归遍历。

具体的实现为

 1 void dfsFolder( string folderPath, int depth)
 2 {
 3 #ifdef WIN32
 4     _finddata_t FileInfo;
 5     string strfind = folderPath + "\\*";
 6     long Handle = _findfirst(strfind.c_str(), &FileInfo);
 7 
 8     if (Handle == -1L)
 9     {
10         cerr << "can not match the folder path" << endl;
11         exit(-1);
12     }
13     do{
14         //判断是否有子目录
15         if (FileInfo.attrib & _A_SUBDIR)    
16         {
17             //这个语句很重要
18             if( (strcmp(FileInfo.name,".") != 0 ) &&(strcmp(FileInfo.name,"..") != 0))   
19             {
20                 string newPath = folderPath + "\\" + FileInfo.name;
21                 dfsFolder(newPath);
22             }
23         }
24         else  
25         {
26             string filename = (folderPath + "\\" + FileInfo.name);
27 28             cout << folderPath << "\\" << FileInfo.name  << " " << endl;
29         }
30     }while (_findnext(Handle, &FileInfo) == 0);
31 
32     _findclose(Handle);
33 #else
34     DIR *dp;
35     struct dirent *entry;
36     struct stat statbuf;
37     if((dp = opendir(folderPath.c_str())) == NULL) {
38         fprintf(stderr,"cannot open directory: %s\n", folderPath.c_str());
39         return;
40     }
41     chdir(folderPath.c_str());
42     while((entry = readdir(dp)) != NULL) {
43         lstat(entry->d_name,&statbuf);
44         if(S_ISDIR(statbuf.st_mode)) {
45 
46             if(strcmp(".",entry->d_name) == 0 ||
47                 strcmp("..",entry->d_name) == 0)
48                 continue;
49             printf("%*s%s/\n",depth,"",entry->d_name);
50             dfsFolder(entry->d_name,depth+4);
51         } else {
52             string filename = entry->d_name;
53 54             printf("%*s%s\n",depth,"",entry->d_name);
55         }
56     }
57     chdir("..");
58     closedir(dp);
59 #endif
61 }

chdir 是C语言中的一个系统调用函数(同cd),其中对目录"."及".."进行特殊的判断,因为"."是表示当前目录,".."表示父目录。

如果不进行特殊判定的话则进入死循环。

一个很简单的功能,希望可以帮助得到需要的同学们~

转载于:https://www.cnblogs.com/tickdream/p/3315726.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/300876.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语言埃尔米特插值思路,【数学建模算法】(26)插值和拟合:埃尔米特(Hermite)插值和样条插值...

1.埃尔米特(Hermite)插值1.1.Hermite插值多项式如果对插值函数&#xff0c;不仅要求它在节点处与函数同值&#xff0c;而且要求它与函数有相同的一阶、二阶甚至更高阶的导数值&#xff0c;这就是 Hermite 插值问题。本节主要讨论在节点处插值函数与函数的值及一阶导数值均相等的…

剖析XAML语言

这节剖析一下XAML(读作&#xff1a;zaml)——这一WPF中的UI设计语言。XAML在wpf中&#xff0c;UI部分使用xaml语言来编写&#xff0c;xaml语言是由xml语言派生而来的语言&#xff0c;所以在xaml中我们可以看到很多熟悉的特点&#xff1a;它也是使用标签构建页面&#xff0c;一个…

又是一年国庆日

祝伟大祖国繁荣昌盛! 愿伟大祖国的人民幸福安康! 转载于:https://www.cnblogs.com/Farseer1215/archive/2006/09/30/519256.html

中国最神秘的一所大学,它只存在过8年,却成了永远的第一

全世界只有3.14 % 的人关注了青少年数学之旅本文授权转载于公众号&#xff1a;物道精致生活&#xff08;wudaojieqi&#xff09;&#xff0c;转载请联系物道中国曾经有过这么一所大学&#xff1a;在抗日战争中仓促搭起&#xff0c;被称为“史上最穷”&#xff0c;校舍破旧得梁思…

ibatise 没有大于等于吗_库里+杜兰特并没有大于等于2!或许他和库里搭配将更强...

NBA历史风卷云涌&#xff0c;巨星层出不穷&#xff0c;就算是称霸一时的巨星组合亦是多不胜数。默契的魔术师与贾巴尔&#xff0c;强悍的斯托克顿与马龙&#xff0c;绝对统治的乔丹与皮蓬&#xff0c;飞天遁地的科比与奥尼尔。就算是近十年&#xff0c;有如韦德与詹姆斯&#x…

Dotnet Core 优雅的命令行实现

介绍一个命令行的实现库&#xff0c;可以优雅而简单的实现命令行应用。前言控制台应用 Console&#xff0c;在我们开发中用处很多。小到一个简单的功能测试&#xff0c;或一组不需要复杂 UI 的工具类应用&#xff0c;大到后端的服务&#xff0c;都会用到 Console。在这里面&…

android 获取当前画布,Android硬件位图填坑之获取硬件画布

前言Hardware Bitmap(硬件位图)是Android8.0加入的新功能&#xff0c;通过设置Bitmap的config为Bitmap.Config.HARDWARE&#xff0c;创建所谓的Hardware Bitmap&#xff0c;它不同与其他Config的Bitmap&#xff0c;Hardware Bitmap对应的像素数据是存储在显存中&#xff0c;并对…

JSP数据库连接方式总结

现在有好多初学jsp的网友经常会问数据库怎么连接啊&#xff0c;怎么老出错啊&#xff1f;所以我集中的在这写篇文章供大家参考&#xff0c;其实这种把数据库逻辑全部放在jsp里未必是好的做法&#xff0c;但是有利于初学者学习&#xff0c;所以我就这样做了&#xff0c;当大家学…

Java中Filter的理解

Filter工作原理当客户端发出Web资源的请求时&#xff0c;Web服务器根据应用程序配置文件设置的过滤规则进行检查&#xff0c;若客户请求满足过滤规则&#xff0c;则对客户请求&#xff0f;响应进行拦截&#xff0c;对请求头和请求数据进行检查或改动&#xff0c;并依次通过过滤…

一句话征服了美国人,这位饱受争议的数学博士竟从未上过学?

全世界只有3.14 % 的人关注了青少年数学之旅前两天&#xff0c;有位不愿意透露姓名的模友问了超模君一个问题&#xff1a;虽然这个问题超模君已经解答过无数遍了&#xff0c;但看到模友如此虔诚的态度&#xff0c;超模君决定今天再给模友们讲一个犹太小伙用数学征服美国军官的故…

使用 C# 开发浏览器扩展

使用 C# Blazor 开发浏览器扩展Intro前段时间听了 Justin 大佬分享的 Blazor 开发浏览器扩展&#xff0c;觉得很不错&#xff0c;C# 可以做更多有趣的事情了&#xff0c;很多需要在服务器端做的事情可能就可以在客户端里实现了&#xff0c;而且高度可以复用已有的 C# 代码&…

一个设置ip的vbs脚本

经常在两个网段间转换 常改ip&#xff0c;找了一个改ip的脚本稍微改了一下&#xff0c;让他适合我的情况&#xff08;自动判断我的ip&#xff09;strComputer "."SetobjWMIService GetObject("winmgmts:\\"&strComputer &"\root\cimv2")…

心动的本质是什么_《心动的信号3》:在“烟火气”里嗑糖,素人恋爱究竟有多上头?...

文 | 土豆2018年&#xff0c;一档画风清新&#xff0c;以素人恋爱为主体、辅之以明星观察为核心的恋爱社交真人秀节目&#xff0c;走红于市场。彼时国内综艺市场&#xff0c;尚且还处于竞技类真人秀、偶像综艺的爆发期——《心动的信号》播出以后&#xff0c;不仅成功开启了国内…

android 如何动态设置margin,Android 动态设置margin

android的view中有setPadding&#xff0c;但是没有直接的setMargin方法。如果要在代码中设置该怎么做呢&#xff1f;可以通过设置view里面的LayoutParams设置&#xff0c;而这个LayoutParams是根据该view在不同的GroupView而不同的。布局文件如下:xmlns:tools"http://sche…

公司服务器iSCSI网络硬盘连接故障

今天检查备份服务器工作状态&#xff0c;发现iSCSI硬盘连接出现了故障。然后刷新了一下系统状态&#xff0c;发现过了几秒钟后又重新连接上了。心里很疑惑&#xff0c;于是开始检查服务器日志。发现在9月13日凌晨4点20分左右有两个来源为l2nd的消息。稍前的一个信息告知网络控制…

老是担心数学学不好?是因为你的数学老师不是爱因斯坦!

各位模友&#xff0c;大家好我是小木相信上学的时候&#xff0c;数学对于很多人来说&#xff0c;无疑是个坑&#xff01;好不容易毕业了&#xff0c;好奇又好学的小表妹每次都能完美地引起小木的心酸历程。就在小木一边回忆起自己的心酸历程的同时&#xff0c;不禁感叹&#xf…

创业95%失败不是因项目本身

95%的人想过个人创业&#xff1b;95%的人一直只是停留在想象的阶段&#xff1b;95%的人创业失败&#xff1b;95%的失败不是因为项目本身的问题。 多年以前&#xff0c;就曾有句著名的口号&#xff1a;“十亿人民九亿商&#xff0c;还有一亿要开张。”中国人的个人创业意识普及…

oracle 产看执行计划_ODBA 技能SPM计划

OBA技能1-获取执行计划OBA技能2-执行计划顺序OBA技能&#xff13;-执行计划顺序表连接ODBA 技能&#xff14;实战执行计划ODBA 技能5 固定执行计划因为每次统计信息作业在收集完信息后&#xff0c;会触发ACS自适应游标管理程序&#xff0c;进行对绑定变量的窥探工作&#xff0c…

android动画设置的单位,Kotlin语言入门—实现单位转换,view设置,动画等

dp转换为px在android开发中&#xff0c;dp sp px之间的转换是不可避免的&#xff0c;在使用java语言开发时&#xff0c;往往会做个工具类进项转化。这样的工具类在网上很多&#xff0c;这里就不在展示了。如果使用Kotlin语言开发&#xff0c;则可以通过通过Extension来优雅的解…

微软面向初学者的机器学习课程:1.1-机器学习介绍

写在前面&#xff1a;最近在参与microsoft/ML-For-Beginners的翻译活动&#xff0c;欢迎有兴趣的朋友加入&#xff08;https://github.com/microsoft/ML-For-Beginners/issues/71&#xff09;机器学习介绍![机器学习&#xff0c;人工智能&#xff0c;深度学习-有什么区别?](ht…