本文介绍了win32、android下文件夹的创建以及递归删除,下述代码都可直接在Cocos中调用

头文件:
#if (CC_TARGET_PLATFORM != CC_PLATFORM_WIN32)
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h> 
#include <stdio.h>
#include <dirent.h>
#endif

代码:
//Android or win32 创建文件夹
bool DLManager::createDirectory(const char * path)
{
#if (CC_TARGET_PLATFORM != CC_PLATFORM_WIN32)
	mode_t processMask = umask(0);
	int ret = mkdir(path,S_IRWXU | S_IRWXG | S_IRWXO);
	umask(processMask);
	if (ret != 0 && (errno != EEXIST))
	{
		cclog("mkdir Failed...");
		return false;
	}

	return true;
#else
	BOOL ret = CreateDirectoryA(path,NULL);
	if (!ret && ERROR_ALREADY_EXISTS != GetLastError())
	{
		return false;
	}
	return true;
#endif
}

//Android or win32 递归删除文件夹
bool DLManager::deleteDirectory(const char * path)
{
#if (CC_TARGET_PLATFORM != CC_PLATFORM_WIN32)
	DeleteDirectory(path);
#else	
	return DeleteDirectoryWin32(path);	
#endif
}

//Android 下判断是否为文件夹————引用自http://blog.csdn.net/honty/article/details/7822923
int DLManager::IsDirectory(const char * filename)  
{  
#if (CC_TARGET_PLATFORM != CC_PLATFORM_WIN32)

	struct stat buf;  
	int ret = stat(filename,&buf);  
	if(0 == ret)  
	{  
		if(buf.st_mode & S_IFDIR)  
		{  
			//printf("%s is folder\n",filename);  
			return 0;  
		}  
		else  
		{  
			//printf("%s is file\n",filename);  
			return 1;  
		}  
	}  
	return -1;  

#endif

	return -1;
}  

//Android 下递归删除文件夹————引用自http://blog.csdn.net/honty/article/details/7822923
int DLManager::DeleteDirectory(const char * dirname)  
{  
#if (CC_TARGET_PLATFORM != CC_PLATFORM_WIN32)

	char chBuf[256];  
	DIR * dir = NULL;  
	struct dirent *ptr;  
	int ret = 0;  
	dir = opendir(dirname);  
	if(NULL == dir)  
	{  
		return -1;  
	}  
	while((ptr = readdir(dir)) != NULL)  
	{  
		ret = strcmp(ptr->d_name,".");  
		if(0 == ret)  
		{  
			continue;  
		}  
		ret = strcmp(ptr->d_name,"..");  
		if(0 == ret)  
		{  
			continue;  
		}  
		snprintf(chBuf,256,"%s/%s",dirname,ptr->d_name);  
		ret = IsDirectory(chBuf);  
		if(0 == ret)  
		{  
			//printf("%s is dir\n",chBuf);  
			ret = DeleteDirectory(chBuf);  
			if(0 != ret)  
			{  
				return -1;  
			}  
		}  
		else if(1 == ret)  
		{  
			//printf("%s is file\n",chBuf);  
			ret = remove(chBuf);  
			if(0 != ret)  
			{  
				return -1;  
			}  
		}  
	}  
	(void)closedir(dir);  

	ret = remove(dirname);  
	if(0 != ret)  
	{  
		return -1;  
	}  
	return 0;  

#endif

	return -1;
}  

//win32 下判断是否为文件夹————引用自http://blog.csdn.net/jaff20071234/article/details/6559533
bool DLManager::IsDirectoryWin32(const char *pDir)  
{ 
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)

    char szCurPath[500];  
    ZeroMemory(szCurPath,500);  
    sprintf_s(szCurPath,500,"%s//*",pDir);  
    WIN32_FIND_DATAA FindFileData;        
    ZeroMemory(&FindFileData,sizeof(WIN32_FIND_DATAA));  
  
    HANDLE hFile = FindFirstFileA(szCurPath,&FindFileData); /**< find first file by given path. */  
  
    if( hFile == INVALID_HANDLE_VALUE )   
    {  
        FindClose(hFile);  
        return FALSE; /** 如果不能找到第一个文件,那么没有目录 */  
    }else  
    {     
        FindClose(hFile);  
        return TRUE;  
    }  

#endif

	return false;
}  

//win32 下递归删除文件夹————引用自http://blog.csdn.net/jaff20071234/article/details/6559533  
bool DLManager::DeleteDirectoryWin32(const char * DirName)  
{  
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)

//http://blog.csdn.net/jaff20071234/article/details/6559533
//  CFileFind tempFind;     //声明一个CFileFind类变量,以用来搜索  
    char szCurPath[MAX_PATH];       //用于定义搜索格式  
    _snprintf(szCurPath,MAX_PATH,"%s//*.*",DirName); //匹配格式为*.*,即该目录下的所有文件  
    WIN32_FIND_DATAA FindFileData;        
    ZeroMemory(&FindFileData,sizeof(WIN32_FIND_DATAA));  
    HANDLE hFile = FindFirstFileA(szCurPath,&FindFileData);  
    BOOL IsFinded = TRUE;  
    while(IsFinded)  
    {  
        IsFinded = FindNextFileA(hFile,&FindFileData); //递归搜索其他的文件  
        if( strcmp(FindFileData.cFileName,".") && strcmp(FindFileData.cFileName,"..") ) //如果不是"." ".."目录  
        {  
            string strFileName = "";  
            strFileName = strFileName + DirName + "//" + FindFileData.cFileName;  
            string strTemp;  
            strTemp = strFileName;  
            if( IsDirectoryWin32(strFileName.c_str()) ) //如果是目录,则递归地调用  
            {     
                printf("目录为:%s/n",strFileName.c_str());  
                DeleteDirectoryWin32(strTemp.c_str());  
            }  
            else  
            {  
                DeleteFileA(strTemp.c_str());  
            }  
        }  
    }  
    FindClose(hFile);  
  
    BOOL bRet = RemoveDirectoryA(DirName);  
    if( bRet == 0 ) //删除目录  
    {  
        printf("删除%s目录失败!/n",DirName);  
        return FALSE;  
    }  
    return TRUE;  

#endif

	return false;
} 

Cocos2.2.3文件夹的创建与递归删除的更多相关文章

  1. Html5 滚动穿透的方法

    这篇文章主要介绍了Html5 滚动穿透的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  2. HTML5 拖放(Drag 和 Drop)详解与实例代码

    本篇文章主要介绍了HTML5 拖放(Drag 和 Drop)详解与实例代码,具有一定的参考价值,有兴趣的可以了解一下

  3. 跨域修改iframe页面内容详解

    这篇文章主要介绍了跨域修改iframe页面内容详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  4. ios – Xcode找不到Alamofire,错误:没有这样的模块’Alamofire’

    我正在尝试按照github(https://github.com/Alamofire/Alamofire#cocoapods)指令将Alamofire包含在我的Swift项目中.我创建了一个新项目,导航到项目目录并运行此命令sudogeminstallcocoapods.然后我面临以下错误:搜索后我设法通过运行此命令安装cocoapodssudogeminstall-n/usr/local/bin

  5. ios – 暂停调度队列是否会暂停其目标队列?

    我想创建两个串行队列A&B.队列B是队列A的目标.我想在B上排队一些块,并暂停它直到我准备执行它们,但是我想继续在队列A上执行块.如果我暂停B,这还会暂停它的目标队列(队列A)吗?我的想法是,我想安排这些特定的块在稍后日期执行但是我不希望它们同时运行而我不这样做想要处理信号量.但我希望队列A继续处理它的块,而B则被暂停如果不清楚这里是一些示例代码解决方法queueB被挂起,但queueA未被挂起.queueA和queueB被挂起.

  6. ios – 使用CocoaPods post install hook将自定义路径添加到HEADER_SEARCH_PATHS

    解决方法在Podfile中定义一个方法:然后在post_install中调用该方法:

  7. ios – 如何使用blender和PowerVR SDK为cocos3d创建一个简单的3d球体

    我是cocos3d的新手.我想创建一个简单的项目–旋转的3d球体.我用搅拌机设计了一个3d球体.所以我想要帮助创建collada文件和pod文件.使用blender和PowerVRSDK创建这个简单的3d对象时应该注意什么.谢谢解决方法如何在搅拌机中制作简单的球体,然后使用JeffLamarche的Blender-to-iOSscript将其导出?这甚至不需要Cocos或PowerVR,但这是一个良好的开端.由于您可以在iOS中轻松地将Cocos与非Cocos类集成,因此可能会有所帮助.你可以更进一步,利

  8. ios – 在Swift中删除WKWebView Accesory栏

    我现在正试着将this转换成Swift而没有真正的背景.这是我到目前为止所得到的…而且我一直在寻找谷歌并不知道要搜索什么才能更具体.你能否详细说明我做错了什么?

  9. ios – 嵌套递归函数

    我试图做一个嵌套递归函数,但是当我编译时,编译器崩溃.这是我的代码:编译器记录arehere解决方法有趣的…它似乎也许在尝试在定义之前捕获到内部的引用时,它是bailing?以下修复它为我们:当然没有嵌套,我们根本没有任何问题,例如以下工作完全如预期:我会说:报告!

  10. iOS,ld:framework没有找到适用于架构arm64的GoogleMaps

    Podfile看起来像这个Cocoapodsv1.0beta6):解决方法更新请检查您是否在架构中具有相同的构建设置,并仅构建活动体系结构中的目标键你的podfile应该是这样的在您启动ProjectTest目标之前结束项目目标,也是为什么添加继承!

随机推荐

  1. 【cocos2d-x 3.x 学习笔记】对象内存管理

    Cocos2d-x的内存管理cocos2d-x中使用的是上面的引用计数来管理内存,但是又增加了一些自己的特色。cocos2d-x中通过Ref类来实现引用计数,所有需要实现内存自动回收的类都应该继承自Ref类。下面是Ref类的定义:在cocos2d-x中创建对象通常有两种方式:这两中方式的差异可以参见我另一篇博文“对象创建方式讨论”。在cocos2d-x中提倡使用第二种方式,为了避免误用第一种方式,一般将构造函数设为protected或private。参考资料:[1]cocos2d-x高级开发教程2.3节[

  2. 利用cocos2dx 3.2开发消灭星星六如何在cocos2dx中显示中文

    由于编码的不同,在cocos2dx中的Label控件中如果放入中文字,往往会出现乱码。为了方便使用,我把这个从文档中获取中文字的方法放在一个头文件里面Chinese.h这里的tex_vec是cocos2dx提供的一个保存文档内容的一个容器。这里给出ChineseWords,xml的格式再看看ChineseWord的实现Chinese.cpp就这样,以后在需要用到中文字的地方,就先include这个头文件然后调用ChineseWord函数,获取一串中文字符串。

  3. 利用cocos2dx 3.2开发消灭星星七关于星星的算法

    在前面,我们已经在GameLayer中利用随机数初始化了一个StarMatrix,如果还不知道怎么创建星星矩阵请回去看看而且我们也讲了整个游戏的触摸事件的派发了。

  4. cocos2dx3.x 新手打包APK注意事项!

    这个在编译的时候就可以发现了比较好弄这只是我遇到的,其他的以后遇到再补充吧。。。以前被这两个问题坑了好久

  5. 利用cocos2dx 3.2开发消灭星星八游戏的结束判断与数据控制

    如果你看完之前的,那么你基本已经拥有一个消灭星星游戏的雏形。开始把剩下的两两互不相连的星星消去。那么如何判断是GameOver还是进入下一关呢。。其实游戏数据贯穿整个游戏,包括星星消除的时候要加到获得分数上,消去剩下两两不相连的星星的时候的加分政策等,因此如果前面没有做这一块的,最好回去搞一搞。

  6. 利用cocos2dx 3.2开发消灭星星九为游戏添加一些特效

    needClear是一个flag,当游戏判断不能再继续后,这个flag变为true,开始消除剩下的星星clearSumTime是一个累加器ONE_CLEAR_TIME就是每颗星星消除的时间2.连击加分信息一般消除一次星星都会有连击信息和加多少分的信息。其实这些combo标签就是一张图片,也是通过控制其属性或者runAction来实现。源码ComboEffect.hComboEffect.cpp4.消除星星粒子效果消除星星时,为了实现星星爆裂散落的效果,使用了cocos2d提供的粒子特效引擎对于粒子特效不了

  7. 02 Cocos2D-x引擎win7环境搭建及创建项目

    官网有搭建的文章,直接转载记录。环境搭建:本文介绍如何搭建Cocos2d-x3.2版本的开发环境。项目创建:一、通过命令创建项目前面搭建好环境后,怎样创建自己的Cocos2d-x项目呢?先来看看Cocos2d-x3.2的目录吧这就是Cocos2d-x3.2的目录。输入cocosnew项目名–p包名–lcpp–d路径回车就创建成功了例如:成功后,找到这个项目打开proj.win32目录下的Hello.slnF5成功了。

  8. 利用cocos2dx 3.2开发消灭星星十为游戏添加音效项目源码分享

    一个游戏,声音也是非常的重要,其实cocos2dx里面的简单音效引擎的使用是非常简单的。我这里只不过是用一个类对所有的音效进行管理罢了。Audio.hAudio.cpp好了,本系列教程到此结束,第一次写教程如有不对请见谅或指教,谢谢大家。最后附上整个项目的源代码点击打开链接

  9. 03 Helloworld

    程序都有一个入口点,在C++就是main函数了,打开main.cpp,代码如下:123456789101112131415161718#include"main.h"#include"AppDelegate.h"#include"cocos2d.h"USING_NS_CC;intAPIENTRY_tWinMain{UNREFERENCED_ParaMETER;UNREFERENCED_ParaMETER;//createtheapplicationinstanceAppDelegateapp;return

  10. MenuItemImage*图标菜单创建注意事项

    学习cocos2dx,看的是cocos2d-x3.x手游开发实例详解,这本书错误一大把,本着探索求知勇于发现错误改正错误的精神,我跟着书上的例子一起调试,当学习到场景切换这个小节的时候,出了个错误,卡了我好几个小时。

返回
顶部