Это универсальная система пакетирования файлов для кросс-платформенного использования, поддерживающая Linux и Windows. Система используется при выпуске программного обеспечения или предоставлении серверной среды для третьих сторон для управления и шифрования собственных файловых ресурсов. Файловая система написана на чистом C и может адаптироваться к различным проектам и платформам.
При запуске программы вызвать vfs_create
и указать рабочий каталог программы
Пример кода:
if (VFS_FALSE == vfs_create(VFS_SDK_VERSION, "workpath"))
return -1;
Добавьте часто используемые архивы. Если архива нет, это тоже нормально — в этом случае данные будут считываться из одноименной директории с файлами. Если архив отсутствует в рабочем каталоге, программа будет работать в режиме разработки, что позволяет легко менять ресурсы во время разработки.
Пример кода:
vfs_add_archive("script.pak", "");
vfs_add_archive("effect.pak", "");
vfs_add_archive("a/b/c/scene.pak", "");
Эти API используются для имитации работы с директориями. Например, если текущая структура каталога выглядит так:```plaintext workpath |-------/script -> после упаковки становится script.pak |-------/effect -> после упаковки становится effect.pak |-------/a/b/c/scene -> после упаковки становится /a/b/c/scene.pak, можно также упаковать a как a.pak
во время разработки мы используем относительные пути для чтения данных. Например, в директории `script` есть файл `_init_.lua`, поэтому наш метод чтения будет таким:
```c
struct vfs_stream *stream = vfs_stream_open("script/_init_.lua");
if (!stream) {
return VFS_FALSE;
}
/* Обработка чтения */
vfs_stream_read(stream, buf, size, count);
/* Закрытие */
vfs_stream_close(stream);
stream = NULL;
При чтении данных, если существует только директория script
, но отсутствует файл script.pak
, мы будем читать данные из директории script
. Это то, что обычно называют режимом разработки.
В режиме разработки совершенно не требуется упаковывать какие-либо директории.
Как только разработка завершена, перед тестированием или выпуском версии, можно упаковать соответствующие директории с помощью функции pack_dir
.
Чтобы прочитать файл в программе, достаточно использовать относительный путь.
```Например, был файл map0.scene
в директории `a/b/c/scene:`
Для чтения файла используйте следующий код:
struct vfs_stream *stream = vfs_stream_open("a/b/c/scene/map0.scene");
if (!stream)
return VFS_FALSE;
/* Ваш код для чтения */
vfs_stream_read(stream, buf, size, count);
/* Закрытие */
vfs_stream_close(stream);
stream = NULL;
Если вы собираетесь архивировать директорию scene
, обязательно поместите файл scene.pak
в ту же директорию, где раньше находился scene
.
Структура директорий после архивации будет такой:
workpath
|-------/script.pak
|-------/effect.pak
|-------/a/b/c/scene.pak
Вы также можете выбрать архивацию директории a
, что приведёт к следующей структуре директорий:
workpath
|-------/script.pak
|-------/effect.pak
|-------/a.pak
Конечно, вам потребуется изменить ваш код инициализации PAK:
Исходный код:
vfs_add_archive("script.pak", "");
vfs_add_archive("effect.pak", "");
vfs_add_archive("a/b/c/scene.pak", "");
Обновлённый код:
vfs_add_archive("script.pak", "");
vfs_add_archive("effect.pak", "");
vfs_add_archive("a.pak", "");
Ваш код чтения не требует никаких изменений, поэтому даже при изменении структуры директорий всё будет работать легко и удобно.
При завершении программы необходимо вызвать соответствующие функции завершения, чтобы освободить данные.
Добавьте следующий код в место завершения программы:
vfs_destroy();
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )