2026-03-19 01:06:12 +08:00
|
|
|
|
# FileArchive
|
|
|
|
|
|
|
|
|
|
|
|
**命名空间**: `XCEngine::Resources`
|
|
|
|
|
|
|
2026-03-20 02:35:35 +08:00
|
|
|
|
**类型**: `class`
|
2026-03-19 01:06:12 +08:00
|
|
|
|
|
2026-03-26 02:00:45 +08:00
|
|
|
|
**头文件**: `XCEngine/Core/IO/FileArchive.h`
|
2026-03-19 01:06:12 +08:00
|
|
|
|
|
2026-03-20 02:35:35 +08:00
|
|
|
|
**继承自**: `IArchive`
|
2026-03-19 01:06:12 +08:00
|
|
|
|
|
2026-03-20 02:35:35 +08:00
|
|
|
|
**描述**: 文件归档读取器,将文件系统目录作为虚拟归档进行访问。
|
2026-03-19 01:06:12 +08:00
|
|
|
|
|
2026-03-20 02:35:35 +08:00
|
|
|
|
## 概述
|
2026-03-19 01:06:12 +08:00
|
|
|
|
|
2026-03-20 02:35:35 +08:00
|
|
|
|
`FileArchive` 实现了 `IArchive` 接口,用于将文件系统目录作为虚拟归档进行访问。它维护已打开目录的路径和有效性状态,支持读取文件、检查存在性、获取文件大小等操作。
|
2026-03-19 01:06:12 +08:00
|
|
|
|
|
|
|
|
|
|
## 继承关系
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
IArchive
|
|
|
|
|
|
└── FileArchive
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 公共方法
|
|
|
|
|
|
|
|
|
|
|
|
| 方法 | 描述 |
|
|
|
|
|
|
|------|------|
|
2026-03-20 02:35:35 +08:00
|
|
|
|
| [`FileArchive()`](filearchive.md) | 默认构造 |
|
|
|
|
|
|
| [`~FileArchive()`](filearchive.md) | 析构函数,自动关闭归档 |
|
|
|
|
|
|
| [`Open(...)`](open.md) | 打开归档目录 |
|
|
|
|
|
|
| [`Close()`](close.md) | 关闭归档 |
|
|
|
|
|
|
| [`Read(...)`](read.md) | 读取文件数据 |
|
|
|
|
|
|
| [`GetSize(...)`](getsize.md) | 获取文件大小 |
|
|
|
|
|
|
| [`Exists(...)`](exists.md) | 检查文件是否存在 |
|
|
|
|
|
|
| [`Enumerate(...)`](enumerate.md) | 枚举匹配的文件(暂未实现) |
|
|
|
|
|
|
| [`IsValid()`](filearchive.md) | 检查归档是否有效 |
|
|
|
|
|
|
| [`GetPath()`](filearchive.md) | 获取归档路径 |
|
2026-03-19 01:06:12 +08:00
|
|
|
|
|
|
|
|
|
|
## 使用示例
|
|
|
|
|
|
|
|
|
|
|
|
```cpp
|
2026-03-26 02:00:45 +08:00
|
|
|
|
#include <XCEngine/Core/IO/FileArchive.h>
|
2026-03-20 02:35:35 +08:00
|
|
|
|
|
|
|
|
|
|
// 创建并打开归档
|
2026-03-19 01:06:12 +08:00
|
|
|
|
FileArchive archive;
|
2026-03-20 02:35:35 +08:00
|
|
|
|
if (archive.Open("resources/textures/")) {
|
2026-03-19 01:06:12 +08:00
|
|
|
|
// 检查文件是否存在
|
2026-03-20 02:35:35 +08:00
|
|
|
|
if (archive.Exists("player.png")) {
|
2026-03-19 01:06:12 +08:00
|
|
|
|
// 获取文件大小
|
2026-03-20 02:35:35 +08:00
|
|
|
|
size_t size = archive.GetSize("player.png");
|
2026-03-19 01:06:12 +08:00
|
|
|
|
|
|
|
|
|
|
// 读取文件内容
|
|
|
|
|
|
Containers::Array<Core::uint8> buffer(size);
|
2026-03-20 02:35:35 +08:00
|
|
|
|
if (archive.Read("player.png", buffer.Data(), size, 0)) {
|
|
|
|
|
|
// 处理文件数据
|
|
|
|
|
|
}
|
2026-03-19 01:06:12 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-20 02:35:35 +08:00
|
|
|
|
// 枚举匹配的文件
|
2026-03-19 01:06:12 +08:00
|
|
|
|
Containers::Array<Containers::String> files;
|
2026-03-20 02:35:35 +08:00
|
|
|
|
archive.Enumerate("*.png", files);
|
2026-03-19 01:06:12 +08:00
|
|
|
|
|
|
|
|
|
|
archive.Close();
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2026-03-20 02:35:35 +08:00
|
|
|
|
## 实现说明
|
|
|
|
|
|
|
|
|
|
|
|
- `Enumerate()` 当前为 stub,仅清空输出数组,未实现模式匹配功能。
|
|
|
|
|
|
|
2026-03-19 01:06:12 +08:00
|
|
|
|
## 相关文档
|
|
|
|
|
|
|
2026-03-20 02:35:35 +08:00
|
|
|
|
- [Resources 模块总览](../resources.md) - 返回模块总览
|
2026-03-26 02:00:45 +08:00
|
|
|
|
- [IArchive](../resource-file-system/iarchive.md) - 归档接口定义
|
|
|
|
|
|
- [ResourceFileSystem](../resource-file-system/index.md) - 资源文件系统
|