Файловая система
Файловая система
Заголовок раздела «Файловая система»Чтение, запись и управление файлами в изолированных томах файловой системы.
Настройку файловой системы см. в Filesystem.
Загрузка
Заголовок раздела «Загрузка»local fs = require("fs")Получение тома
Заголовок раздела «Получение тома»Получить том файловой системы по ID реестра:
local vol, err = fs.get("app:storage")if err then return nil, errend
local content = vol:readfile("/config.json")| Параметр | Тип | Описание |
|---|---|---|
name | string | ID тома в реестре |
Возвращает: FS, error
Чтение файлов
Заголовок раздела «Чтение файлов»Чтение всего содержимого файла:
local vol = fs.get("app:config")
local data, err = vol:readfile("/settings.json")if err then return nil, errend
local config = json.decode(data)Для больших файлов используйте потоковое чтение через open():
local file = vol:open("/data/large.csv", "r")
while true do local chunk = file:read(65536) if not chunk or #chunk == 0 then break end process(chunk)end
file:close()Запись файлов
Заголовок раздела «Запись файлов»Запись данных в файл:
local vol = fs.get("app:data")
-- Перезапись (по умолчанию)vol:writefile("/config.json", json.encode(config))
-- Дозаписьvol:writefile("/logs/app.log", message .. "\n", "a")
-- Эксклюзивная запись (ошибка если существует)local ok, err = vol:writefile("/lock.pid", tostring(pid), "wx")| Режим | Описание |
|---|---|
"w" | Перезапись (по умолчанию) |
"a" | Дозапись |
"wx" | Эксклюзивная запись (ошибка если файл существует) |
Для потоковой записи:
local file = vol:open("/output/report.txt", "w")file:write("Header\n")file:write("Data: " .. value .. "\n")file:sync()file:close()Проверка путей
Заголовок раздела «Проверка путей»local vol = fs.get("app:data")
-- Проверка существованияif vol:exists("/cache/results.json") then return vol:readfile("/cache/results.json")end
-- Проверка директорииif vol:isdir(path) then process_directory(path)end
-- Получение информации о файлеlocal info = vol:stat("/documents/report.pdf")print(info.size, info.modified, info.type)Поля stat: name, size, mode, modified, is_dir, type
Операции с директориями
Заголовок раздела «Операции с директориями»local vol = fs.get("app:data")
-- Создание директорииvol:mkdir("/uploads/" .. user_id)
-- Список содержимого директорииfor entry in vol:readdir("/documents") do print(entry.name, entry.type)end
-- Удаление файла или пустой директорииvol:remove("/temp/file.txt")Поля записи: name, type (“file” или “directory”)
Методы файлового дескриптора
Заголовок раздела «Методы файлового дескриптора»При использовании vol:open() для потоковой работы:
| Метод | Описание |
|---|---|
read(size?) | Прочитать байты (по умолчанию: 4096) |
write(data) | Записать строковые данные |
seek(whence, offset) | Установить позицию (“set”, “cur”, “end”) |
stat() | Получить информацию о файле (те же поля, что и vol:stat) |
sync() | Сбросить в хранилище |
close() | Освободить дескриптор |
scanner(split?) | Создать сканер строк/слов |
Всегда вызывайте close() после работы с дескриптором.
Scanner
Заголовок раздела «Scanner»Для построчной обработки:
local file = vol:open("/data/users.csv", "r")local scanner = file:scanner("lines")
scanner:scan() -- пропустить заголовок
while scanner:scan() do local line = scanner:text() process(line)end
file:close()Режимы разбиения: "lines" (по умолчанию), "words", "bytes", "runes"
Константы
Заголовок раздела «Константы»fs.type.FILE -- "file"fs.type.DIR -- "directory"
fs.seek.SET -- от началаfs.seek.CUR -- от текущей позицииfs.seek.END -- от концаМетоды FS
Заголовок раздела «Методы FS»| Метод | Возвращает | Описание |
|---|---|---|
readfile(path) / read_file(path) | string, error | Прочитать весь файл |
writefile(path, data, mode?) / write_file(path, data, mode?) | boolean, error | Записать файл |
exists(path) | boolean, error | Проверить существование пути |
stat(path) | table, error | Получить информацию о файле |
isdir(path) | boolean, error | Проверить директорию |
mkdir(path) | boolean, error | Создать директорию |
remove(path) | boolean, error | Удалить файл/пустую директорию |
readdir(path) | iterator | Список содержимого директории |
open(path, mode) | File, error | Открыть дескриптор файла |
chdir(path) | boolean, error | Сменить рабочую директорию |
pwd() | string, error | Получить рабочую директорию |
Разрешения
Заголовок раздела «Разрешения»Доступ к файловой системе подчиняется вычислению политики безопасности.
| Действие | Ресурс | Описание |
|---|---|---|
fs.get | ID тома | Получить том файловой системы |
| Условие | Kind | Повторяемо |
|---|---|---|
| Пустой путь | errors.INVALID | нет |
| Некорректный режим | errors.INVALID | нет |
| Файл закрыт | errors.INVALID | нет |
| Путь не найден | errors.NOT_FOUND | нет |
| Путь уже существует | errors.ALREADY_EXISTS | нет |
| Доступ запрещён | errors.PERMISSION_DENIED | нет |
См. Обработка ошибок для работы с ошибками.