Dateisystem

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

Für Dateisystemkonfiguration siehe Dateisystem.

Laden

local fs = require("fs")

Volume abrufen

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")
Parameter Typ Beschreibung
name string Volume-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.

Dateien lesen

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()

Dateien schreiben

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")
Modus Beschreibung
"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()

Pfade prüfen

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

Verzeichnisoperationen

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")

Datei-Handle-Methoden

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

Methode Beschreibung
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.

Scanner

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"

Konstanten

fs.type.FILE      -- "file"
fs.type.DIR       -- "directory"

fs.seek.SET       -- vom Anfang
fs.seek.CUR       -- von aktueller Position
fs.seek.END       -- vom Ende

FS-Methoden

Methode Gibt zurück Beschreibung
readfile(path) / read_file(path) string, error Gesamte Datei lesen
writefile(path, data, mode?) / write_file(path, data, mode?) boolean, error Datei schreiben
exists(path) boolean, error Prüfen ob Pfad existiert
stat(path) table, error Dateiinfo abrufen
isdir(path) boolean, error Prüfen ob Verzeichnis
mkdir(path) boolean, error Verzeichnis erstellen
remove(path) boolean, error Datei/leeres Verzeichnis entfernen
readdir(path) iterator Verzeichnis auflisten
open(path, mode) File, error Datei-Handle öffnen
chdir(path) boolean, error Arbeitsverzeichnis wechseln
pwd() string, error Arbeitsverzeichnis abrufen

Berechtigungen

Dateisystemzugriff unterliegt der Sicherheitsrichtlinienauswertung.

Aktion Ressource Beschreibung
fs.get Volume-ID Dateisystem-Volume abrufen

Fehler

Bedingung Art Wiederholbar
Leerer Pfad errors.INVALID nein
Ungültiger Modus errors.INVALID nein
Datei ist geschlossen errors.INVALID nein
Pfad nicht gefunden errors.NOT_FOUND nein
Pfad existiert bereits errors.ALREADY_EXISTS nein
Berechtigung verweigert errors.PERMISSION_DENIED nein

Siehe Fehlerbehandlung für die Arbeit mit Fehlern.