ÜberblickDie FS-Dokumentation von Node enthält viele APIs, schließlich unterstützt es Dateisystemoperationen vollständig. Die Dokumentation ist gut organisiert und die Vorgänge sind grundsätzlich in Dateivorgänge, Verzeichnisvorgänge, Dateiinformationen und Streams unterteilt. Die Programmiermethode unterstützt auch Synchronisierung, Asynchronität und Promise. In diesem Artikel werden mehrere Probleme beschrieben, die im Dokument nicht ausführlich beschrieben werden. Dadurch können die Ideen des FS-Dokuments besser verknüpft werden:
DateideskriptorenEin Dateideskriptor ist eine nicht negative Ganzzahl. Es handelt sich dabei um einen Indexwert, mit dessen Hilfe das Betriebssystem die entsprechende Datei finden kann. In vielen Low-Level-APIs von fs sind Dateideskriptoren erforderlich. In der Dokumentation werden Deskriptoren üblicherweise durch fd dargestellt. Beispiel: fs.read(fd, Puffer, Offset, Länge, Position, Rückruf). Die entsprechende API ist: fs.readFile(Pfad[, Optionen], Rückruf). Da das Betriebssystem eine Begrenzung für die Anzahl der Dateideskriptoren hat, vergessen Sie nicht, die Datei nach Abschluss des Dateivorgangs zu schließen: const fs = erfordern("fs"); fs.open("./db.json", "r", (err, fd) => { wenn (err) throw err; // Dateioperationen... // Nach Abschluss des Vorgangs die Datei schließen fs.close(fd, err => { wenn (err) throw err; }); }); Synchron, asynchron und PromiseAlle Dateisystem-APIs gibt es sowohl synchrone als auch asynchrone Formen. Synchrones SchreibenEs wird nicht empfohlen, synchrone APIs zu verwenden, da diese den Thread blockieren. versuchen { const buf = fs.readFileSync("./package.json"); console.log(buf.toString("utf8")); } Fehler abfangen { console.log(Fehlermeldung); } Asynchrones SchreibenBeim asynchronen Schreiben kann es leicht passieren, dass Sie in die Callback-Hölle geraten. fs.readFile("./package.json", (err, data) => { wenn (err) throw err; Konsole.log(data.toString("utf8")); }); (Empfohlen) Versprechen schreibenVor Node v12 müssen Sie die Promise-Kapselung selbst verwenden: Funktion readFilePromise(Pfad, Kodierung = "utf8") { const promise = neues Versprechen((lösen, ablehnen) => { fs.readFile(Pfad, (Fehler, Daten) => { wenn (Fehler) returniere ablehnen(Fehler); Rückgabewert für „resolve(data.toString(encoding)“); }); }); Rückgabeversprechen; } : Lesen Sie das Skript und geben Sie es in das Skript ein. In Node v12 wurde die FS Promise API eingeführt. Sie geben Promise-Objekte zurück, anstatt Rückrufe zu verwenden. Auf die API kann über require('fs').promises zugegriffen werden. Dies reduziert die Entwicklungskosten. const fsPromises = erfordern("fs").promises; fsVersprechen .readFile("./package.json", { Kodierung: "utf8", Flagge: "r" }) .then(Konsole.log) .catch(Konsole.Fehler); Kataloge und Katalogartikelfs.Dir-Klasse: kapselt Operationen im Zusammenhang mit Dateiverzeichnissen Klasse fs.Dirent: kapselt Operationen im Zusammenhang mit Verzeichniseinträgen. Bestimmen Sie beispielsweise den Gerätetyp (Zeichen, Block, FIFO usw.). Die Beziehung zwischen ihnen wird im Code dargestellt: const fsPromises = erfordern("fs").promises; asynchrone Funktion main() { const dir = await fsPromises.opendir("."); lass dirent = null; während ((dirent = warte auf dir.read()) !== null) { Konsole.log(dirent.name); } } hauptsächlich(); Dateiinformationenfs.Stats-Klasse: kapselt Operationen im Zusammenhang mit Dateiinformationen. Es wird in der Rückruffunktion fs.stat() zurückgegeben. fs.stat("./package.json", (err, stats) => { wenn (err) throw err; konsole.log(Statistiken); }); Hinweis zur Überprüfung, ob die Datei existiert:
ReadStream und WriteStreamIn Node.JS ist Stream eine sehr wichtige Bibliothek. Die APIs vieler Bibliotheken sind streambasiert gekapselt. Beispielsweise der unten beschriebene ReadStream und WriteStream in fs. fs selbst stellt readFile und writeFile bereit, der Preis für deren Nützlichkeit sind jedoch Leistungsprobleme, da der gesamte Inhalt auf einmal in den Speicher geladen wird. Bei großen Dateien von mehreren GByte gibt es allerdings offensichtlich Probleme. Die Lösung für große Dateien lautet also natürlich: Stück für Stück auslesen. Dies erfordert die Verwendung von Stream. Am Beispiel von readStream lautet der Code wie folgt: const rs = fs.createReadStream("./package.json"); lass Inhalt = ""; rs.on("öffnen", () => { console.log("mit dem Lesen beginnen"); }); rs.on("Daten", chunk => { Inhalt += chunk.toString("utf8"); }); rs.on("schließen", () => { console.log("Lesen beenden, Inhalt ist:\n", Inhalt); }); Mithilfe von Stream Pipe lässt sich eine große Dateikopierfunktion schnell in einer Zeile zusammenfassen: Funktion kopiereGroßeDatei(Quelle, Ziel) { fs.createReadStream(Quelle).pipe(fs.createWriteStream(Ziel)); } Oben finden Sie Einzelheiten zur Verwendung des Moduls fs-Dateisystem in Nodejs. Weitere Informationen zu Nodejs finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: C# implementiert MySQL-Befehlszeilensicherung und -wiederherstellung
>>: Ansible - Bereitstellungsmethode für automatisierten Betrieb und Wartung für Linux-Systeme
1. Geschäftshintergrund Die Verwendung einer Mask...
1. MySQL-Datenbank herunterladen und installieren...
Inhaltsverzeichnis Vorwort 1. Warum brauchen wir ...
Inhaltsverzeichnis 1 Konfiguration der Java-Umgeb...
Bei der Frontend-Entwicklung stehen wir in direkt...
Die EXPLAIN-Anweisung liefert Informationen darüb...
Hintergrund: Vor langer Zeit (2017.6.5, der Artik...
Vorwort Anwendungsszenario: Wahrscheinlich muss d...
Der Befehl fd bietet eine einfache und unkomplizi...
Vorwort Bei der täglichen Codeentwicklung gibt es...
Vorwort In diesem Artikel erfahren Sie hauptsächl...
Eine kurze Einführung in protobuf Protobuf ist Go...
Der Fortschrittsbalken ist nicht gleichmäßig Ich ...
Inhaltsverzeichnis 1. Szenariobeschreibung 2. Lös...
In diesem Artikelbeispiel wird der spezifische Co...