Ogre为我们实现了一个叫做Archive的类:文档存档类(我的理解是一个文件系统的目录,或者一个压缩包)。
使用该类可以读取指定目录中的指定文件,并且返回该文件的数据流DataStream,之后就可以使用数据流来获取文件中的内容。
使用Archive读取文件代码:
// 使用Archive来读取文件系统目录(压缩文件目录)
void ReadFileFromPath(const String& dirPath)
{
String type = "FileSystem";
// 根据路径创建档案文件对象
Archive* pArchive = ArchiveManager::getSingletonPtr()->load(dirPath, type, true);
// 列出所有的文件名
StringVectorPtr filenames = pArchive->list(true);
StringVector::iterator it = filenames->begin();
for (; it != paths->end(); ++it)
{
String temp = *it;
DataStreamPtr fileStream = pArchive->open(temp);
// 将文件内容读取到字符传中
String str = fileStream->getAsString();
// 获取一整行内容
fileStream->getLine(true);
....
}
//创建文件
//pArchive->create("filename");
}
实际上Archive::open函数内部是创建的c++标准库的filestream来进行读写文件,因此只要是filestream可以实现的功能Archive都可以实现。
Archive是一个抽象类,Ogre已经实现了两个具体的Archive类,分别是FileSystemArchive和ZipArchive类,一个用于读取系统文件系统中的文件,另一个用于读取压缩包(Zip)中的文件。
网友评论