Ir al contenido

Sistema de Archivos

Leer, escribir y gestionar archivos dentro de volumenes de sistema de archivos aislados.

Para configuración del sistema de archivos, consulte Sistema de Archivos.

local fs = require("fs")

Obtener un volumen de sistema de archivos por ID de registro:

local vol, err = fs.get("app:storage")
if err then
return nil, err
end
local content = vol:readfile("/config.json")
ParámetroTipoDescripción
namestringID de registro del volumen

Devuelve: FS, error

Los volumenes no requieren liberacion explicita. Se gestionan a nivel de sistema y quedan no disponibles si el sistema de archivos se desconecta del registro.

Leer contenido completo del archivo:

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 archivos grandes, use streaming con 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()

Escribir datos a un archivo:

local vol = fs.get("app:data")
-- Sobrescribir (predeterminado)
vol:writefile("/config.json", json.encode(config))
-- Agregar
vol:writefile("/logs/app.log", message .. "\n", "a")
-- Escritura exclusiva (falla si existe)
local ok, err = vol:writefile("/lock.pid", tostring(pid), "wx")
ModoDescripción
"w"Sobrescribir (predeterminado)
"a"Agregar
"wx"Escritura exclusiva (falla si el archivo existe)

Para escrituras en 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 si es directorio
if vol:isdir(path) then
process_directory(path)
end
-- Obtener información de archivo
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")
-- Crear directorio
vol:mkdir("/uploads/" .. user_id)
-- Listar contenido del directorio
for entry in vol:readdir("/documents") do
print(entry.name, entry.type)
end
-- Eliminar archivo o directorio vacio
vol:remove("/temp/file.txt")

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

Cuando se usa vol:open() para streaming:

MétodoDescripción
read(size?)Leer bytes (predeterminado: 4096)
write(data)Escribir datos string
seek(whence, offset)Establecer posicion (“set”, “cur”, “end”)
stat()Obtener info del archivo (mismos campos que vol:stat)
sync()Vaciar al almacenamiento
close()Liberar handle de archivo
scanner(split?)Crear escaner de linea/palabra

Siempre llame close() cuando termine con un handle de archivo.

Para procesamiento linea por linea:

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

Modos de division: "lines" (predeterminado), "words", "bytes", "runes"

fs.type.FILE -- "file"
fs.type.DIR -- "directory"
fs.seek.SET -- desde inicio
fs.seek.CUR -- desde actual
fs.seek.END -- desde final
MétodoDevuelveDescripción
readfile(path) / read_file(path)string, errorLeer archivo completo
writefile(path, data, mode?) / write_file(path, data, mode?)boolean, errorEscribir archivo
exists(path)boolean, errorVerificar si ruta existe
stat(path)table, errorObtener información de archivo
isdir(path)boolean, errorVerificar si es directorio
mkdir(path)boolean, errorCrear directorio
remove(path)boolean, errorEliminar archivo/directorio vacio
readdir(path)iteratorListar directorio
open(path, mode)File, errorAbrir handle de archivo
chdir(path)boolean, errorCambiar directorio de trabajo
pwd()string, errorObtener directorio de trabajo

El acceso al sistema de archivos esta sujeto a evaluacion de politica de seguridad.

AccionRecursoDescripción
fs.getID de VolumenAdquirir volumen de sistema de archivos
CondiciónTipoReintentable
Ruta vaciaerrors.INVALIDno
Modo invalidoerrors.INVALIDno
Archivo cerradoerrors.INVALIDno
Ruta no encontradaerrors.NOT_FOUNDno
Ruta ya existeerrors.ALREADY_EXISTSno
Permiso denegadoerrors.PERMISSION_DENIEDno

Consulte Manejo de Errores para trabajar con errores.