Pular para o conteúdo

Filesystem

Leia, escreva e gerencie arquivos dentro de volumes de filesystem em sandbox.

Para configuração de filesystem, veja Filesystem.

local fs = require("fs")

Obter um volume de filesystem por ID do registro:

local vol, err = fs.get("app:storage")
if err then
return nil, err
end
local content = vol:readfile("/config.json")
ParâmetroTipoDescrição
namestringID do volume no registro

Retorna: FS, error

Volumes não requerem liberação explicita. Sao gerenciados no nivel do sistema e se tornam indisponíveis se o filesystem for desanexado do registro.

Ler conteudo completo do arquivo:

local vol = fs.get("app:config")
local data, err = vol:readfile("/settings.json")
if err then
return nil, err
end
local config = json.decode(data)

Para arquivos grandes, use streaming com 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()

Escrever dados em um arquivo:

local vol = fs.get("app:data")
-- Sobrescrever (padrão)
vol:writefile("/config.json", json.encode(config))
-- Anexar
vol:writefile("/logs/app.log", message .. "\n", "a")
-- Escrita exclusiva (falha se existe)
local ok, err = vol:writefile("/lock.pid", tostring(pid), "wx")
ModoDescrição
"w"Sobrescrever (padrão)
"a"Anexar
"wx"Escrita exclusiva (falha se arquivo existe)

Para escritas em streaming:

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")
-- Verificar existencia
if vol:exists("/cache/results.json") then
return vol:readfile("/cache/results.json")
end
-- Verificar se e diretorio
if vol:isdir(path) then
process_directory(path)
end
-- Obter informacoes do arquivo
local info = vol:stat("/documents/report.pdf")
print(info.size, info.modified, info.type)

Campos de stat: name, size, mode, modified, is_dir, type

local vol = fs.get("app:data")
-- Criar diretorio
vol:mkdir("/uploads/" .. user_id)
-- Listar conteudo do diretorio
for entry in vol:readdir("/documents") do
print(entry.name, entry.type)
end
-- Remover arquivo ou diretorio vazio
vol:remove("/temp/file.txt")

Campos de entrada: name, type (“file” ou “directory”)

Ao usar vol:open() para streaming:

MétodoDescrição
read(size?)Ler bytes (padrão: 4096)
write(data)Escrever dados string
seek(whence, offset)Definir posicao (“set”, “cur”, “end”)
stat()Obter info do arquivo (mesmos campos de vol:stat)
sync()Flush para armazenamento
close()Liberar file handle
scanner(split?)Criar scanner de linha/palavra

Sempre chame close() ao terminar com um file handle.

Para processamento linha por linha:

local file = vol:open("/data/users.csv", "r")
local scanner = file:scanner("lines")
scanner:scan() -- pular header
while scanner:scan() do
local line = scanner:text()
process(line)
end
file:close()

Modos de split: "lines" (padrão), "words", "bytes", "runes"

fs.type.FILE -- "file"
fs.type.DIR -- "directory"
fs.seek.SET -- do inicio
fs.seek.CUR -- do atual
fs.seek.END -- do fim
MétodoRetornaDescrição
readfile(path) / read_file(path)string, errorLer arquivo inteiro
writefile(path, data, mode?) / write_file(path, data, mode?)boolean, errorEscrever arquivo
exists(path)boolean, errorVerificar se caminho existe
stat(path)table, errorObter info do arquivo
isdir(path)boolean, errorVerificar se e diretorio
mkdir(path)boolean, errorCriar diretorio
remove(path)boolean, errorRemover arquivo/diretorio vazio
readdir(path)iteratorListar diretorio
open(path, mode)File, errorAbrir file handle
chdir(path)boolean, errorMudar diretorio de trabalho
pwd()string, errorObter diretorio de trabalho

Acesso ao filesystem está sujeito a avaliação de política de segurança.

AçãoRecursoDescrição
fs.getID do VolumeAdquirir volume de filesystem
CondiçãoTipoRetentável
Caminho vazioerrors.INVALIDnão
Modo inválidoerrors.INVALIDnão
Arquivo fechadoerrors.INVALIDnão
Caminho não encontradoerrors.NOT_FOUNDnão
Caminho ja existeerrors.ALREADY_EXISTSnão
Permissão negadaerrors.PERMISSION_DENIEDnão

Veja Error Handling para trabalhar com erros.