您的位置:首页 > 移动开发 > Cocos引擎

Cocos2.2.3文件夹的创建与递归删除

2016-02-25 17:55 176 查看
本文介绍了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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: