Irrlicht系统的文件系统在顶层的接口当中提供了文件的基本读写操作,在后面的实现中分了不同的类型,提供zip文件,pak文件,XML文件以及普通文件的操作,每个用户可以根据不同的需求为自己定制一个文件类型,以及相对应的读写操作,在你的项目中可以使用压缩以及加密。
在irrlicht系统文件系统的实现中主要有一下几种接口:
具体的一些简单操作这里给出几个小例子
文件系统的获取
IrrlichtDevice *device =createDevice( video::EDT_DIRECT3D9, dimension2d<s32>(640, 480));
IFileSystem* pFileSystem = device->getFileSystem();
pFileSystem->changeWorkingDirectoryTo("D://Irrlicht_TestFile");
普通文件的读写
IReadFile* pReadFile = pFileSystem->createAndOpenFile("./read.ini");
int iSize = pReadFile->getSize();
char* pReadBuf = new char[iSize+1];
memset(pReadBuf,0,iSize+1);
iSize = pReadFile->read(pReadBuf,iSize);
printf("File Contents : %s/n",pReadBuf);
delete[] pReadBuf;
pReadFile->drop();
IWriteFile* pWriteFile = pFileSystem->createAndWriteFile("./write.ini");
core::stringc sWrite = "this is the file system test---file write.";
pWriteFile->write(sWrite.c_str(),sWrite.size());
pWriteFile->drop();
文件列表操作
IFileList* pFileList = pFileSystem->createFileList();
int iFileCount = pFileList->getFileCount();
pFileList->drop();
XML文件使用:
IrrXMLReader* pXmlReader = createIrrXMLReader("./config.xml");
while(pXmlReader && pXmlReader->read())
{
switch(pXmlReader->getNodeType())
{
case EXN_COMMENT:
printf("Comment : %s/n",pXmlReader->getNodeData());
break;
case EXN_TEXT:
printf("Text : %s/n",pXmlReader->getNodeData());
break;
case EXN_ELEMENT:
{
printf("Node Name : %s/n",pXmlReader->getNodeName());
int iCount = pXmlReader->getAttributeCount();
for (int i=0;i<iCount;i++)
{
printf("Attribute (%s) --- Value (%s)/n",pXmlReader->getAttributeName(i),pXmlReader->getAttributeValue(i));
}
}
break;
default:
break;
}
}
delete pXmlReader;
目录文件
if (pFileSystem->addFolderFileArchive("./Files"))
{
IReadFile* pFoldReadFile = pFileSystem->createAndOpenFile("a_read.ini");
iSize = pFoldReadFile->getSize();
pReadBuf = new char[iSize+1];
memset(pReadBuf,0,iSize+1);
iSize = pFoldReadFile->read(pReadBuf,iSize);
printf("Zip File Contents : %s/n",pReadBuf);
delete[] pReadBuf;
pFoldReadFile->drop();
}
ZIP文件
delete pXmlReader;
if (pFileSystem->addZipFileArchive("./archive.zip"))
{
IReadFile* pZipReadFile = pFileSystem->createAndOpenFile("./config/config.xml");
iSize = pZipReadFile->getSize();
pReadBuf = new char[iSize+1];
memset(pReadBuf,0,iSize+1);
iSize = pZipReadFile->read(pReadBuf,iSize);
printf("Zip File Contents : %s/n",pReadBuf);
delete[] pReadBuf;
pZipReadFile->drop();
IWriteFile* pZipWriteFile = pFileSystem->createAndWriteFile("./write.ini");
core::stringc sWrite = "this is the file system test---Zip file write.";
iSize = 0;
iSize = pZipWriteFile->write(sWrite.c_str(),sWrite.size());
pZipWriteFile->drop();
}
最后要drop掉设备
device->drop();
不过这些应该是不能满足正常的项目开发,所以,用这些基础开发自己的文件操作和存储格式吧!在irrlicht文件系统的基础之下完成这些应该是非常简单的了!