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.
Carga
local fs = require("fs")
Adquirir un Volumen
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ámetro | Tipo | Descripción |
|---|---|---|
name |
string | ID de registro del volumen |
Devuelve: FS, error
Leer Archivos
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 Archivos
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")
| Modo | Descripció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()
Verificar Rutas
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
Operaciones de Directorio
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")
Metodos de Handle de Archivo
Cuando se usa vol:open() para streaming:
| Método | Descripción |
|---|---|
read(size?) |
Leer bytes (predeterminado: 4096) |
write(data) |
Escribir datos string |
seek(whence, offset) |
Establecer posicion ("set", "cur", "end") |
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.
Scanner
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"
Constantes
fs.type.FILE -- "file"
fs.type.DIR -- "directory"
fs.seek.SET -- desde inicio
fs.seek.CUR -- desde actual
fs.seek.END -- desde final
Metodos de FS
| Método | Devuelve | Descripción |
|---|---|---|
readfile(path) |
string, error |
Leer archivo completo |
writefile(path, data, mode?) |
boolean, error |
Escribir archivo |
exists(path) |
boolean, error |
Verificar si ruta existe |
stat(path) |
table, error |
Obtener información de archivo |
isdir(path) |
boolean, error |
Verificar si es directorio |
mkdir(path) |
boolean, error |
Crear directorio |
remove(path) |
boolean, error |
Eliminar archivo/directorio vacio |
readdir(path) |
iterator |
Listar directorio |
open(path, mode) |
File, error |
Abrir handle de archivo |
chdir(path) |
boolean, error |
Cambiar directorio de trabajo |
pwd() |
string |
Obtener directorio de trabajo |
Permisos
El acceso al sistema de archivos esta sujeto a evaluacion de politica de seguridad.
| Accion | Recurso | Descripción |
|---|---|---|
fs.get |
ID de Volumen | Adquirir volumen de sistema de archivos |
Errores
| Condición | Tipo | Reintentable |
|---|---|---|
| Ruta vacia | errors.INVALID |
no |
| Modo invalido | errors.INVALID |
no |
| Archivo cerrado | errors.INVALID |
no |
| Ruta no encontrada | errors.NOT_FOUND |
no |
| Ruta ya existe | errors.ALREADY_EXISTS |
no |
| Permiso denegado | errors.PERMISSION_DENIED |
no |
Consulte Manejo de Errores para trabajar con errores.