2026-03-26 16:45:24 +08:00
|
|
|
|
# IO
|
|
|
|
|
|
|
2026-03-27 19:18:53 +08:00
|
|
|
|
**命名空间**: `XCEngine::Resources`
|
2026-03-26 16:45:24 +08:00
|
|
|
|
|
|
|
|
|
|
**类型**: `submodule`
|
|
|
|
|
|
|
2026-03-27 19:18:53 +08:00
|
|
|
|
**描述**: 定义资源路径辅助、资源加载器接口、包文件与虚拟文件系统相关基础设施。
|
2026-03-26 16:45:24 +08:00
|
|
|
|
|
|
|
|
|
|
## 概览
|
|
|
|
|
|
|
2026-03-27 19:18:53 +08:00
|
|
|
|
`Core/IO` 这个目录在物理结构上属于 `Core`,但逻辑命名空间已经落在 `XCEngine::Resources`。它承担的是“资源系统和底层文件访问之间的桥梁层”:
|
|
|
|
|
|
|
|
|
|
|
|
- [ResourcePath](ResourcePath/ResourcePath.md) 负责轻量路径拆分和 GUID 派生
|
|
|
|
|
|
- [IResourceLoader](IResourceLoader/IResourceLoader.md) 负责把磁盘数据转换成运行时 `IResource`
|
|
|
|
|
|
- [FileArchive](FileArchive/FileArchive.md) 和 [ResourcePackage](ResourcePackage/ResourcePackage.md) 负责资源容器抽象
|
|
|
|
|
|
- [ResourceFileSystem](ResourceFileSystem/ResourceFileSystem.md) 试图把目录、归档和包文件统一到一个虚拟资源访问入口
|
|
|
|
|
|
|
|
|
|
|
|
从设计方向看,这一层很像商业引擎里的 runtime file access / resource loading substrate。它不是完整的编辑器资产数据库,更接近运行时资源读取和格式装载层。
|
|
|
|
|
|
|
|
|
|
|
|
## 设计要点
|
|
|
|
|
|
|
|
|
|
|
|
- `IResourceLoader` 是当前最关键的接口,因为 [ResourceManager](../Asset/ResourceManager/ResourceManager.md) 最终就是靠它真正加载资源。
|
|
|
|
|
|
- `ResourcePath` 只是字符串辅助类,不负责真实文件系统查询、标准化或路径规范化。
|
|
|
|
|
|
- `FileArchive`、`ResourcePackage`、`ResourceFileSystem` 已经搭好了虚拟文件系统方向的 API 轮廓,但当前实现普遍还比较早期。
|
|
|
|
|
|
- 当前这层里存在一些需要明确写进文档的实现差异,例如:
|
|
|
|
|
|
- `ResourcePath::GetExtension()` 返回带点扩展名,如 `.png`
|
|
|
|
|
|
- `IResourceLoader::GetExtension()` 返回不带点扩展名,如 `png`
|
|
|
|
|
|
|
|
|
|
|
|
## 当前实现现状
|
|
|
|
|
|
|
|
|
|
|
|
- 真正稳定可用的主路径仍然是“具体 loader + [ResourceManager](../Asset/ResourceManager/ResourceManager.md) 同步加载”。
|
|
|
|
|
|
- `ResourcePath` 当前可用于做名称拆分和 GUID 生成,但不应被理解成跨平台标准化路径工具。
|
|
|
|
|
|
- `FileArchive` 当前更像“目录前缀适配器”,不是真正的压缩归档读取器。
|
|
|
|
|
|
- `ResourcePackage` 的 builder 和 reader 当前还没有形成闭环。
|
|
|
|
|
|
- `ResourceFileSystem` 的虚拟文件系统层当前仍有明显占位实现和行为缺口。
|
2026-03-26 16:45:24 +08:00
|
|
|
|
|
|
|
|
|
|
## 头文件
|
|
|
|
|
|
|
|
|
|
|
|
- [FileArchive](FileArchive/FileArchive.md) - `FileArchive.h`
|
|
|
|
|
|
- [IResourceLoader](IResourceLoader/IResourceLoader.md) - `IResourceLoader.h`
|
|
|
|
|
|
- [ResourceFileSystem](ResourceFileSystem/ResourceFileSystem.md) - `ResourceFileSystem.h`
|
|
|
|
|
|
- [ResourcePackage](ResourcePackage/ResourcePackage.md) - `ResourcePackage.h`
|
|
|
|
|
|
- [ResourcePath](ResourcePath/ResourcePath.md) - `ResourcePath.h`
|
|
|
|
|
|
|
2026-03-27 19:18:53 +08:00
|
|
|
|
## 推荐阅读顺序
|
|
|
|
|
|
|
|
|
|
|
|
1. 先读 [ResourcePath](ResourcePath/ResourcePath.md),理解当前路径字符串约定和 GUID 派生方式。
|
|
|
|
|
|
2. 再读 [IResourceLoader](IResourceLoader/IResourceLoader.md),这是连接 IO 层和 Asset 层的关键接口。
|
|
|
|
|
|
3. 然后读 [ResourceFileSystem](ResourceFileSystem/ResourceFileSystem.md),了解当前虚拟文件系统层的设计方向和限制。
|
|
|
|
|
|
4. 最后再读 [FileArchive](FileArchive/FileArchive.md) 和 [ResourcePackage](ResourcePackage/ResourcePackage.md),理解当前容器格式支持做到哪一步。
|
|
|
|
|
|
|
|
|
|
|
|
## 相关指南
|
|
|
|
|
|
|
|
|
|
|
|
- [Resource Paths, Packages, And Virtual File System](../../../_guides/Core/IO/Resource-Paths-Packages-And-Virtual-FileSystem.md)
|
|
|
|
|
|
|
2026-03-26 16:45:24 +08:00
|
|
|
|
## 相关文档
|
|
|
|
|
|
|
|
|
|
|
|
- [上级目录](../Core.md)
|
2026-03-27 19:18:53 +08:00
|
|
|
|
- [Asset](../Asset/Asset.md)
|
2026-03-26 16:45:24 +08:00
|
|
|
|
- [API 总索引](../../../main.md)
|