COCOS学习笔记--文件系统

1.文件系统的作用

FileUtils是Cocos2d-x里面的文件管理类。它对我们游戏中的资源文件起到管理作用,可以说是游戏资源管理的大管家。FileUtils可以进行读写文件,可以设置搜索路径,可以获得资源文件的绝对路径和相对路径,可以判断文件和文件夹是否存在,可以获得资源文件的大小等。很多对文件操作的所需功能FileUtils都有对应的接口。所以说,没有FileUtils的存在,Cocos是不完整的。


2.文件系统的使用

文件系统的使用主要体现在如下几方面:

1).如何获得Fileutils的单例对象

2).如何通过Fileutils添加搜索路径

3).如何通过Fileutils写入数据

4).如何通过Fileutils读取数据

5).如何通过Fileutils判断文件以及文件夹是否存在

6).如何通过Fileutils创建和删除文件夹


 2.1如何获得Fileutils的单例对象并通过Fileutils添加搜索路径:

//Fileutils对象获得
//获得一个Fileutils的静态单例对象
FileUtils * fUtils = FileUtils::getInstance();
//声明一个vector用来存放可搜索路径文件夹名
std::vector<std::string> _searchPaths;
//创建文件夹名字
std::string dirString = "test";
//将文件夹名添加到vector中
_searchPaths.push_back(dirString);
//添加到可搜索路径中
fUtils->setSearchPaths(_searchPaths);

设置可搜索路径的作用:当设置可搜索路径后,我们使用到可搜索路径文件夹下面的资源时,程序会到该路径下自动查找,若没有设置则找不到。

比如说Resources-res目录下有HelloWorld.png和MainScene.csb文件,如果没有把“res”添加到可搜索路径中,我们使用MainScene.csb会找不到。我们在HelloWorldScene.cpp的init()方法中看到如下代码:

auto rootNode = CSLoader::createNode("MainScene.csb");

那么“res”是在哪里设置的可搜索路径的呢?

我们到AppDelegate.cpp的applicationDidFinishLaunching()方法中可以看到如下代码:

FileUtils::getInstance()->addSearchPath("res");

其实在这里添加了res的可搜索路径啦,我们实际工程一般添加可搜索路径也是在AppDelegate中添加的。

另外addSearchPath()和setSearchPaths()方法有什么区别呢?首先addSearchPath()是使用字符串作为参数的,setSearchPaths()是使用vector作为参数的;其次,作用不一样,虽然都为将文件添加到可搜索路径中,但两者优先级不一样。当查找可搜索路径资源时,优先找setSearchPaths添加的资源,若找不到则再查找addSearchPath添加的资源,热更新也是利用的这一特性。


2.2通过Fileutils写入数据:

//获得可写路径
std::string writePath = fUtils->getWritablePath();
//文件名
std::string fileName = writePath + "test";
//声明数组存储写入字符
char buf[100] = "HelloCocos2d-x";
//创建File对象,不是创建文件夹啊
//第一个参数为filename
//第二个参数为打开模式
FILE * file = fopen(fileName.c_str(),"wb");
//将字符写入到文件中
//返回的st作用是标识写入是否成功
if (file){
size_t  st  =  fwrite(buf,1,strlen(buf),file);
}


2.3通过Fileutils判断文件以及文件夹是否存在:

//判断文件是否存在
bool isExit;
isExit = fUtils->isFileExist("res/HelloWorld.png");
//判断文件夹是否存在
isExit = fUtils->isDirectoryExist(fUtils->fullPathForFilename("res"));


2.4创建文件夹:

//拼文件夹的路径
std::string writePath = fUtils->getWritablePath();
std::string dirPath = writePath + "_test";
//创建文件夹
//返回值标识是否创建成功
bool ok = fUtils->createDirectory(dirPath);


最后,总结一下:

对资源添加搜索路径、判断文件、文件夹是否存在,以及创建文件、文件夹都是通过 FileUtils的一个单例对象来执行的,分别调用了其setSearchPaths()、isFileExist()、isDirectoryExist()、createDirectory()等方法;读写数据时 FileUtils类的职责只是其单例对象通过getWritablePath()方法提供可写路径。



以上,如果哪里有问题欢迎留言一起交流讨论哈!




你可能感兴趣的:(FileUtils,文件系统,文件读写,cocos2d-x,搜索路径)