Ü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
Es gibt zwei Arten von Linux-Systemzeiten. (1) Ka...
Inhaltsverzeichnis 1. Einleitung 2. Mehrere Mögli...
Vorwort In vielen Verwaltungs- und Bürosystemen s...
1. Die Verwendung von Docker Compose ist der Verw...
Vorwort: MYSQL dürfte die beliebteste WEB-Backend...
Meine Seite hatte heute auch verstümmelte Zeichen...
Dieser Artikel beschreibt die Import- und Exportv...
Inhaltsverzeichnis 1. Warum brauchen wir vue3? 2....
Seite: Basis: <Vorlage> <div Klasse=&quo...
Am Anfang war ich traurig. Die Screenshots sind w...
Zusammenfassung: Wenn über die Leistungsoptimieru...
Swap deaktivieren Wenn auf dem Server ein Datenba...
Inhaltsverzeichnis 1. Installation 1. Einleitung ...
Standortabgleichsreihenfolge 1. Übereinstimmung m...
Verwenden Sie JS, um einen einfachen Rechner für ...