Heim Web-Frontend js-Tutorial Node.js lokale Dateioperationsmethode zum Kopieren von Dateien und Verzeichnis traversal_node.js

Node.js lokale Dateioperationsmethode zum Kopieren von Dateien und Verzeichnis traversal_node.js

May 16, 2016 pm 03:15 PM
javascript node node.js 拷贝文件 文件 目录 遍历目录

Dateikopie
NodeJS bietet eine grundlegende Dateioperations-API, erweiterte Funktionen wie das Kopieren von Dateien sind jedoch nicht verfügbar. Daher üben wir zunächst mit dem Programm zum Kopieren von Dateien. Ähnlich wie beim Kopierbefehl muss unser Programm zwei Parameter akzeptieren können: den Quelldateipfad und den Zieldateipfad.

Kleine Dateikopie
Wir verwenden das integrierte fs-Modul von NodeJS, um dieses Programm einfach wie folgt zu implementieren.

var fs = require('fs');

function copy(src, dst) {
  fs.writeFileSync(dst, fs.readFileSync(src));
}

function main(argv) {
  copy(argv[0], argv[1]);
}

main(process.argv.slice(2));

Nach dem Login kopieren

Das obige Programm verwendet fs.readFileSync, um den Dateiinhalt aus dem Quellpfad zu lesen, und verwendet fs.writeFileSync, um den Dateiinhalt in den Zielpfad zu schreiben.

Bean-Wissen: Prozess ist eine globale Variable und Befehlszeilenparameter können über process.argv abgerufen werden. Da argv[0] fest dem absoluten Pfad des ausführbaren NodeJS-Programms entspricht und argv[1] fest dem absoluten Pfad des Hauptmoduls entspricht, beginnt der erste Befehlszeilenparameter an der Position argv[2].

Große Dateikopie
Das obige Programm hat kein Problem damit, einige kleine Dateien zu kopieren, aber diese Methode, den gesamten Dateiinhalt auf einmal in den Speicher zu lesen und ihn dann auf einmal auf die Festplatte zu schreiben, ist nicht zum Kopieren großer Dateien geeignet, und der Speicher wird es tun erschöpft sein. Bei großen Dateien können wir nur ein wenig lesen und ein wenig schreiben, bis der Kopiervorgang abgeschlossen ist. Daher muss das obige Programm wie folgt geändert werden.

var fs = require('fs');

function copy(src, dst) {
  fs.createReadStream(src).pipe(fs.createWriteStream(dst));
}

function main(argv) {
  copy(argv[0], argv[1]);
}

main(process.argv.slice(2));

Nach dem Login kopieren

Das obige Programm verwendet fs.createReadStream, um einen schreibgeschützten Datenstrom für die Quelldatei zu erstellen, und verwendet fs.createWriteStream, um einen schreibgeschützten Datenstrom für die Zieldatei zu erstellen, und verwendet die Pipe-Methode, um die beiden zu verbinden Datenströme. Was passiert, nachdem die Verbindung hergestellt wurde, ist, abstrakter ausgedrückt, dass Wasser entlang des Rohrs von einem Eimer zum anderen fließt.

Verzeichnisse durchqueren

Das Durchsuchen von Verzeichnissen ist eine häufige Anforderung beim Bearbeiten von Dateien. Wenn Sie beispielsweise ein Programm schreiben, das alle JS-Dateien in einem bestimmten Verzeichnis finden und verarbeiten muss, muss es das gesamte Verzeichnis durchlaufen.

Rekursiver Algorithmus
Rekursive Algorithmen werden im Allgemeinen beim Durchlaufen von Verzeichnissen verwendet, da es sonst schwierig wird, prägnanten Code zu schreiben. Rekursive Algorithmen ähneln der mathematischen Induktion darin, dass sie Probleme durch kontinuierliche Reduzierung ihrer Größe lösen. Das folgende Beispiel veranschaulicht diesen Ansatz.

function factorial(n) {
  if (n === 1) {
    return 1;
  } else {
    return n * factorial(n - 1);
  }
}
Nach dem Login kopieren

Die obige Funktion wird verwendet, um die Fakultät von N (N!) zu berechnen. Wie Sie sehen können, reduziert sich das Problem auf die Berechnung der Fakultät von N mal N-1, wenn N größer als 1 ist. Wenn N gleich 1 ist, erreicht das Problem seine minimale Größe und es ist keine weitere Vereinfachung erforderlich, sodass 1 direkt zurückgegeben wird.

Falle: Obwohl der mit dem rekursiven Algorithmus geschriebene Code prägnant ist, da jede Rekursion einen Funktionsaufruf generiert, muss der rekursive Algorithmus in einen Schleifenalgorithmus umgewandelt werden, um die Anzahl der Funktionsaufrufe zu reduzieren, wenn die Leistung priorisiert werden muss.

Traversal-Algorithmus
Das Verzeichnis ist eine Baumstruktur, und beim Durchlaufen wird im Allgemeinen der Durchquerungsalgorithmus der Tiefenreihenfolge verwendet. Tiefe zuerst bedeutet, dass nach Erreichen eines Knotens zuerst die untergeordneten Knoten und nicht die Nachbarknoten durchlaufen werden. Vorbestellungsdurchquerung bedeutet, dass die Durchquerung abgeschlossen ist, wenn ein Knoten zum ersten Mal erreicht wird, und nicht bei der letzten Rückkehr zu einem Knoten. Daher ist die Durchlaufreihenfolge des Baums unten: A >

     A
     / \
    B  C
    / \  \
   D  E  F
Nach dem Login kopieren

Synchronisierte Durchquerung
Nachdem wir die erforderlichen Algorithmen verstanden haben, können wir einfach die folgende Verzeichnisdurchlauffunktion implementieren.

function travel(dir, callback) {
  fs.readdirSync(dir).forEach(function (file) {
    var pathname = path.join(dir, file);

    if (fs.statSync(pathname).isDirectory()) {
      travel(pathname, callback);
    } else {
      callback(pathname);
    }
  });
}

Nach dem Login kopieren

Wie Sie sehen können, verwendet diese Funktion ein Verzeichnis als Ausgangspunkt für die Durchquerung. Wenn ein Unterverzeichnis gefunden wird, wird das Unterverzeichnis zuerst durchlaufen. Wenn eine Datei gefunden wird, wird der absolute Pfad zur Datei an die Rückruffunktion übergeben. Nachdem die Rückruffunktion den Dateipfad erhalten hat, kann sie verschiedene Beurteilungen und Prozesse vornehmen. Nehmen wir also an, wir haben das folgende Verzeichnis:

- /home/user/
  - foo/
    x.js
  - bar/
    y.js
  z.css
Nach dem Login kopieren

Beim Durchlaufen des Verzeichnisses mit dem folgenden Code erhält man folgende Eingabe.

travel('/home/user', function (pathname) {
  console.log(pathname);
});

Nach dem Login kopieren
/home/user/foo/x.js
/home/user/bar/y.js
/home/user/z.css
Nach dem Login kopieren

Asynchrone Durchquerung
Wenn beim Lesen des Verzeichnisses oder Lesens des Dateistatus die asynchrone API verwendet wird, ist die Implementierung der Verzeichnisdurchlauffunktion etwas kompliziert, aber das Prinzip ist genau das gleiche. Die asynchrone Version der Reisefunktion sieht wie folgt aus.

function travel(dir, callback, finish) {
  fs.readdir(dir, function (err, files) {
    (function next(i) {
      if (i < files.length) {
        var pathname = path.join(dir, files[i]);

        fs.stat(pathname, function (err, stats) {
          if (stats.isDirectory()) {
            travel(pathname, callback, function () {
              next(i + 1);
            });
          } else {
            callback(pathname, function () {
              next(i + 1);
            });
          }
        });
      } else {
        finish && finish();
      }
    }(0));
  });
}

Nach dem Login kopieren

Die Schreibfähigkeiten asynchroner Traversalfunktionen werden hier nicht im Detail vorgestellt. Dies wird in den folgenden Kapiteln ausführlich vorgestellt. Kurz gesagt, wir können sehen, dass die asynchrone Programmierung ziemlich kompliziert ist.

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie übertrage ich Dateien von Quark Cloud Disk auf Baidu Cloud Disk? Wie übertrage ich Dateien von Quark Cloud Disk auf Baidu Cloud Disk? Mar 14, 2024 pm 02:07 PM

Quark Netdisk und Baidu Netdisk sind derzeit die am häufigsten verwendete Netdisk-Software zum Speichern von Dateien. Wenn Sie die Dateien in Quark Netdisk auf Baidu Netdisk speichern möchten, wie gehen Sie vor? In dieser Ausgabe hat der Herausgeber die Tutorial-Schritte zum Übertragen von Dateien vom Quark Network Disk-Computer auf die Baidu Network Disk zusammengestellt. Werfen wir einen Blick auf die Bedienung. Wie speichere ich Quark-Netzwerkfestplattendateien auf einer Baidu-Netzwerkfestplatte? Um Dateien von Quark Network Disk auf Baidu Network Disk zu übertragen, müssen Sie zunächst die erforderlichen Dateien von Quark Network Disk herunterladen, dann den Zielordner im Baidu Network Disk-Client auswählen und ihn öffnen. Ziehen Sie dann die von Quark Cloud Disk heruntergeladenen Dateien per Drag & Drop in den vom Baidu Cloud Disk-Client geöffneten Ordner oder verwenden Sie die Upload-Funktion, um die Dateien zu Baidu Cloud Disk hinzuzufügen. Überprüfen Sie nach Abschluss des Uploads unbedingt, ob die Datei erfolgreich in Baidu Cloud Disk übertragen wurde. Das ist es

Was tun, wenn der Fehlercode 0x80004005 angezeigt wird? Der Editor zeigt Ihnen, wie Sie den Fehlercode 0x80004005 beheben können. Was tun, wenn der Fehlercode 0x80004005 angezeigt wird? Der Editor zeigt Ihnen, wie Sie den Fehlercode 0x80004005 beheben können. Mar 21, 2024 pm 09:17 PM

Wenn Sie einen Ordner auf Ihrem Computer löschen oder dekomprimieren, wird manchmal das Dialogfeld „Fehler 0x80004005: Nicht spezifizierter Fehler“ angezeigt. Wie können Sie diese Situation lösen? Es gibt tatsächlich viele Gründe, warum der Fehlercode 0x80004005 angezeigt wird, aber die meisten davon werden durch Viren verursacht. Wir können die DLL erneut registrieren, um das Problem zu lösen. Nachfolgend erklärt Ihnen der Editor die Erfahrung beim Umgang mit dem Fehlercode 0x80004005 . Einige Benutzer erhalten bei der Verwendung ihres Computers den Fehlercode 0X80004005. Der Fehler 0x80004005 wird hauptsächlich dadurch verursacht, dass der Computer bestimmte Dynamic Link Library-Dateien nicht korrekt registriert oder dass eine Firewall keine HTTPS-Verbindungen zwischen dem Computer und dem Internet zulässt. Wie wäre es also?

Was ist die Datei hiberfil.sys? Kann hiberfil.sys gelöscht werden? Was ist die Datei hiberfil.sys? Kann hiberfil.sys gelöscht werden? Mar 15, 2024 am 09:49 AM

Vor kurzem haben viele Internetnutzer den Herausgeber gefragt: Was ist die Datei hiberfil.sys? Kann hiberfil.sys viel Speicherplatz auf Laufwerk C beanspruchen und gelöscht werden? Der Editor kann Ihnen mitteilen, dass die Datei hiberfil.sys gelöscht werden kann. Werfen wir einen Blick auf die Details unten. hiberfil.sys ist eine versteckte Datei im Windows-System und auch eine System-Ruhezustandsdatei. Es wird normalerweise im Stammverzeichnis des Laufwerks C gespeichert und seine Größe entspricht der Größe des installierten Speichers des Systems. Diese Datei wird verwendet, wenn sich der Computer im Ruhezustand befindet, und enthält die Speicherdaten des aktuellen Systems, damit dieser bei der Wiederherstellung schnell wieder in den vorherigen Zustand versetzt werden kann. Da seine Größe der Speicherkapazität entspricht, nimmt er möglicherweise mehr Festplattenspeicher ein. hiber

Unterschiedliche Verwendung von Schrägstrichen und Backslashes in Dateipfaden Unterschiedliche Verwendung von Schrägstrichen und Backslashes in Dateipfaden Feb 26, 2024 pm 04:36 PM

Ein Dateipfad ist eine Zeichenfolge, die vom Betriebssystem verwendet wird, um eine Datei oder einen Ordner zu identifizieren und zu finden. In Dateipfaden gibt es zwei gängige Symbole zur Trennung von Pfaden, nämlich den Schrägstrich (/) und den Backslash (). Diese beiden Symbole haben in verschiedenen Betriebssystemen unterschiedliche Verwendungen und Bedeutungen. Der Schrägstrich (/) ist ein häufig verwendetes Pfadtrennzeichen in Unix- und Linux-Systemen. Auf diesen Systemen beginnen Dateipfade im Stammverzeichnis (/) und werden durch Schrägstriche zwischen den einzelnen Verzeichnissen getrennt. Zum Beispiel der Pfad /home/user/Docume

PI -Knotenunterricht: Was ist ein PI -Knoten? Wie installiere und richte ich einen PI -Knoten ein? PI -Knotenunterricht: Was ist ein PI -Knoten? Wie installiere und richte ich einen PI -Knoten ein? Mar 05, 2025 pm 05:57 PM

Detaillierte Erläuterungs- und Installationshandbuch für Pinetwork -Knoten In diesem Artikel wird das Pinetwork -Ökosystem im Detail vorgestellt - PI -Knoten, eine Schlüsselrolle im Pinetwork -Ökosystem und vollständige Schritte für die Installation und Konfiguration. Nach dem Start des Pinetwork -Blockchain -Testnetzes sind PI -Knoten zu einem wichtigen Bestandteil vieler Pioniere geworden, die aktiv an den Tests teilnehmen und sich auf die bevorstehende Hauptnetzwerkveröffentlichung vorbereiten. Wenn Sie Pinetwork noch nicht kennen, wenden Sie sich bitte an was Picoin ist? Was ist der Preis für die Auflistung? PI -Nutzung, Bergbau und Sicherheitsanalyse. Was ist Pinetwork? Das Pinetwork -Projekt begann 2019 und besitzt seine exklusive Kryptowährung PI -Münze. Das Projekt zielt darauf ab, eine zu erstellen, an der jeder teilnehmen kann

Detaillierte Erklärung des Protokollanzeigebefehls im Linux-System! Detaillierte Erklärung des Protokollanzeigebefehls im Linux-System! Mar 06, 2024 pm 03:55 PM

In Linux-Systemen können Sie den folgenden Befehl verwenden, um den Inhalt der Protokolldatei anzuzeigen: Befehl tail: Der Befehl tail wird verwendet, um den Inhalt am Ende der Protokolldatei anzuzeigen. Dies ist ein allgemeiner Befehl zum Anzeigen der neuesten Protokollinformationen. tail [Option] [Dateiname] Zu den häufig verwendeten Optionen gehören: -n: Geben Sie die Anzahl der anzuzeigenden Zeilen an. Der Standardwert ist 10 Zeilen. -f: Überwachen Sie den Dateiinhalt in Echtzeit und zeigen Sie den neuen Inhalt automatisch an, wenn die Datei aktualisiert wird. Beispiel: tail-n20logfile.txt#Zeigen Sie die letzten 20 Zeilen der Datei logfile.txt an. tail-flogfile.txt#Überwachen Sie den aktualisierten Inhalt der Datei logfile.txt in Echtzeit. Head-Befehl: Der Head-Befehl wird verwendet, um den Anfang anzuzeigen der Protokolldatei

Ausführliche Erläuterung der Rolle von .ibd-Dateien in MySQL und der damit verbundenen Vorsichtsmaßnahmen Ausführliche Erläuterung der Rolle von .ibd-Dateien in MySQL und der damit verbundenen Vorsichtsmaßnahmen Mar 15, 2024 am 08:00 AM

Ausführliche Erläuterung der Rolle von .ibd-Dateien in MySQL und der damit verbundenen Vorsichtsmaßnahmen. MySQL ist ein beliebtes relationales Datenbankverwaltungssystem, und die Daten in der Datenbank werden in verschiedenen Dateien gespeichert. Unter diesen ist die .ibd-Datei eine Datendatei in der InnoDB-Speicher-Engine, die zum Speichern von Daten und Indizes in Tabellen verwendet wird. Dieser Artikel bietet eine detaillierte Analyse der Rolle der .ibd-Datei in MySQL und liefert relevante Codebeispiele, um den Lesern ein besseres Verständnis zu erleichtern. 1. Die Rolle von .ibd-Dateien: Speichern von Daten: .ibd-Dateien sind InnoDB-Speicher

Erstellen Sie Linux-„.a'-Dateien und führen Sie sie aus Erstellen Sie Linux-„.a'-Dateien und führen Sie sie aus Mar 20, 2024 pm 04:46 PM

Die Arbeit mit Dateien im Linux-Betriebssystem erfordert die Verwendung verschiedener Befehle und Techniken, die es Entwicklern ermöglichen, Dateien, Code, Programme, Skripts und andere Dinge effizient zu erstellen und auszuführen. Im Linux-Umfeld haben Dateien mit der Endung „.a“ ​​als statische Bibliotheken eine große Bedeutung. Diese Bibliotheken spielen eine wichtige Rolle in der Softwareentwicklung und ermöglichen Entwicklern die effiziente Verwaltung und gemeinsame Nutzung gemeinsamer Funktionen über mehrere Programme hinweg. Für eine effektive Softwareentwicklung in einer Linux-Umgebung ist es wichtig zu verstehen, wie „.a“-Dateien erstellt und ausgeführt werden. In diesem Artikel wird erläutert, wie Sie die Linux-Datei „.a“ ​​umfassend installieren und konfigurieren. Lassen Sie uns die Definition, den Zweck, die Struktur und die Methoden zum Erstellen und Ausführen der Linux-Datei „.a“ ​​untersuchen. Was ist L?

See all articles