Ü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
In diesem Artikel erfahren Sie den spezifischen C...
Einführung: Die Konfiguration von Docker, auf dem...
MySql ist eine Datenquelle, die wir häufig verwen...
Als er über die Seite zur Bedienung der Bildschir...
Bitte öffnen Sie die Testseite in einem gängigen ...
Deaktivieren und Aktivieren von MySQL-Fremdschlüs...
Inhaltsverzeichnis 1. Verwenden Sie RGB zur Darst...
Dieser Artikel beschreibt, wie man die PHP-Curl-E...
Einführung in CentOS CentOS ist eine Linux-Distri...
Dieser Artikel beschreibt anhand eines Beispiels,...
Frage: In einigen Browsern, wie zum Beispiel im K...
Mit den richtigen Einstellungen können Sie Linux-...
Generieren einer Zertifikatskette Verwenden Sie d...
Nachdem textarea input in Element UI auf automati...
1. SHOW PROCESSLIST-Befehl SHOW PROCESSLIST zeigt...