# Файловая система и сериализация ## Библиотека *file* Библиотека функций для работы с файлами ```python file.resolve(путь: str) -> str ``` Функция приводит запись `точка_входа:путь` (например `user:worlds/house1`) к обычному пути. (например `C://Users/user/.voxeng/worlds/house1`) > [!NOTE] > Функцию не нужно использовать в сочетании с другими функциями из библиотеки, так как они делают это автоматически Возвращаемый путь не является каноническим и может быть как абсолютным, так и относительным. ```python file.read(путь: str) -> str ``` Читает весь текстовый файл и возвращает в виде строки ```python file.read_bytes(путь: str) -> array of integers ``` Читает файл в массив байт. ```python file.write(путь: str, текст: str) -> nil ``` Записывает текст в файл (с перезаписью) ```python file.write_bytes(путь: str, data: array of integers) ``` Записывает массив байт в файл (с перезаписью) ```python file.length(путь: str) -> int ``` Возвращает размер файла в байтах, либо -1, если файл не найден ```python file.exists(путь: str) -> bool ``` Проверяет, существует ли по данному пути файл или директория ```python file.isfile(путь: str) -> bool ``` Проверяет, существует ли по данному пути файл ```python file.isdir(путь: str) -> bool ``` Проверяет, существует ли по данному пути директория ```python file.mkdir(путь: str) -> bool ``` Создает директорию. Возвращает true если была создана новая директория ```python file.mkdirs(путь: str) -> bool ``` Создает всю цепочку директорий. Возвращает true если были созданы директории. ```python file.find(путь: str) -> str ``` Ищет файл от последнего пака до res. Путь указывается без префикса. Возвращает путь с нужным префиксом. Если файл не найден, возвращает nil. ```python file.remove(путь: str) -> bool ``` Удаляет файл. Возращает **true** если файл существовал. Бросает исключение при нарушении доступа. ```python file.remove_tree(путь: str) -> int ``` Рекурсивно удаляет файлы. Возвращает число удаленных файлов. ## Библиотека json Библиотека содержит функции для сериализации и десериализации таблиц: ```python json.tostring(object: table, human_readable: bool=false) -> str ``` Сериализует объект в JSON строку. При значении второго параметра **true** будет использовано многострочное форматирование, удобное для чтения человеком, а не компактное, использующееся по-умолчанию. ```python json.parse(code: str) -> table ``` Парсит JSON строку в таблицу. ## Библиотека toml Библиотека содержит функции для сериализации и десериализации таблиц: ```python toml.tostring(object: table) -> str ``` Сериализует объект в TOML строку. ```python toml.parse(code: str) -> table ``` Парсит TOML строку в таблицу. ## Библиотека bjson Библиотека содержит функции для работы с двоичным форматом обмена данными [vcbjson](../../specs/binary_json_spec.md). ```lua -- Кодирует таблицу в массив байт bjson.tobytes( -- кодируемая таблица value: table, -- сжатие [опционально] compression: bool=true ) --> Bytearray -- Декодирует массив байт в таблицу bjson.frombytes(bytes: table | Bytearray) --> table ``` ## Сохранение данных в мире При сохранении данных пака в мире следует использовать функцию ```python pack.data_file(id_пака: str, имя_файла: str) -> str ``` Функция возвращает путь к файлу данных по типу: `world:data/id_пака/имя_файла` и создает недостающие директории в пути. При использовании путей не соответствующим `data/{packid}/...` возможна потеря данных при перезаписи мира.