Zum Inhalt springen

Dateisystem

Lesen, Schreiben und Verwalten von Dateien innerhalb von Sandbox-Dateisystem-Volumes.

Für Dateisystemkonfiguration siehe Dateisystem.

local fs = require("fs")

Holen Sie ein Dateisystem-Volume anhand der Registry-ID:

local vol, err = fs.get("app:storage")
if err then
return nil, err
end
local content = vol:readfile("/config.json")
ParameterTypBeschreibung
namestringVolume-Registry-ID

Gibt zurück: FS, error

Volumes erfordern keine explizite Freigabe. Sie werden auf Systemebene verwaltet und werden nicht mehr verfügbar, wenn das Dateisystem von der Registry getrennt wird.

Gesamten Dateiinhalt lesen:

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)

Für große Dateien verwenden Sie Streaming mit 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()

Daten in eine Datei schreiben:

local vol = fs.get("app:data")
-- Überschreiben (Standard)
vol:writefile("/config.json", json.encode(config))
-- Anhängen
vol:writefile("/logs/app.log", message .. "\n", "a")
-- Exklusives Schreiben (schlägt fehl wenn vorhanden)
local ok, err = vol:writefile("/lock.pid", tostring(pid), "wx")
ModusBeschreibung
"w"Überschreiben (Standard)
"a"Anhängen
"wx"Exklusives Schreiben (schlägt fehl wenn Datei existiert)

Für Streaming-Schreibvorgänge:

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")
-- Existenz prüfen
if vol:exists("/cache/results.json") then
return vol:readfile("/cache/results.json")
end
-- Prüfen ob Verzeichnis
if vol:isdir(path) then
process_directory(path)
end
-- Dateiinfo abrufen
local info = vol:stat("/documents/report.pdf")
print(info.size, info.modified, info.type)

Stat-Felder: name, size, mode, modified, is_dir, type

local vol = fs.get("app:data")
-- Verzeichnis erstellen
vol:mkdir("/uploads/" .. user_id)
-- Verzeichnisinhalt auflisten
for entry in vol:readdir("/documents") do
print(entry.name, entry.type)
end
-- Datei oder leeres Verzeichnis entfernen
vol:remove("/temp/file.txt")

Eintrag-Felder: name, type (“file” oder “directory”)

Bei Verwendung von vol:open() für Streaming:

MethodeBeschreibung
read(size?)Bytes lesen (Standard: 4096)
write(data)String-Daten schreiben
seek(whence, offset)Position setzen (“set”, “cur”, “end”)
stat()Datei-Info abrufen (gleiche Felder wie vol:stat)
sync()Auf Speicher schreiben
close()Datei-Handle freigeben
scanner(split?)Zeilen-/Wort-Scanner erstellen

Rufen Sie immer close() auf, wenn Sie mit einem Datei-Handle fertig sind.

Für zeilenweise Verarbeitung:

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

Split-Modi: "lines" (Standard), "words", "bytes", "runes"

fs.type.FILE -- "file"
fs.type.DIR -- "directory"
fs.seek.SET -- vom Anfang
fs.seek.CUR -- von aktueller Position
fs.seek.END -- vom Ende
MethodeGibt zurückBeschreibung
readfile(path) / read_file(path)string, errorGesamte Datei lesen
writefile(path, data, mode?) / write_file(path, data, mode?)boolean, errorDatei schreiben
exists(path)boolean, errorPrüfen ob Pfad existiert
stat(path)table, errorDateiinfo abrufen
isdir(path)boolean, errorPrüfen ob Verzeichnis
mkdir(path)boolean, errorVerzeichnis erstellen
remove(path)boolean, errorDatei/leeres Verzeichnis entfernen
readdir(path)iteratorVerzeichnis auflisten
open(path, mode)File, errorDatei-Handle öffnen
chdir(path)boolean, errorArbeitsverzeichnis wechseln
pwd()string, errorArbeitsverzeichnis abrufen

Dateisystemzugriff unterliegt der Sicherheitsrichtlinienauswertung.

AktionRessourceBeschreibung
fs.getVolume-IDDateisystem-Volume abrufen
BedingungArtWiederholbar
Leerer Pfaderrors.INVALIDnein
Ungültiger Moduserrors.INVALIDnein
Datei ist geschlossenerrors.INVALIDnein
Pfad nicht gefundenerrors.NOT_FOUNDnein
Pfad existiert bereitserrors.ALREADY_EXISTSnein
Berechtigung verweigerterrors.PERMISSION_DENIEDnein

Siehe Fehlerbehandlung für die Arbeit mit Fehlern.