Εγγραφή αρχείων στο Node.js

Προσπαθώ να βρω έναν τρόπο να γράψω σε ένα αρχείο όταν χρησιμοποιώ το Node.js, αλλά χωρίς επιτυχία. Πώς μπορώ να το κάνω αυτό;

Λύση

Υπάρχουν πολλές λεπτομέρειες στο File System API. Ο πιο συνηθισμένος τρόπος είναι:

const fs = require('fs');

fs.writeFile("/tmp/test", "Hey there!", function(err) {

    if(err) {
        return console.log(err);
    }

    console.log("The file was saved!");
}); 
Σχόλια (16)

Επί του παρόντος υπάρχουν τρεις τρόποι για να γράψετε ένα αρχείο:

  1. [fs.write(fd, buffer, offset, length, position, callback)][1]

    Πρέπει να περιμένετε την επανάκληση για να διασφαλίσετε ότι ο buffer έχει εγγραφεί στο δίσκο. Δεν έχει ρυθμιστικό χώρο αποθήκευσης.

  2. [fs.writeFile(filename, data, [encoding], callback)][2]

    Όλα τα δεδομένα πρέπει να αποθηκεύονται ταυτόχρονα- δεν μπορείτε να εκτελέσετε διαδοχικές εγγραφές.

  3. [fs.createWriteStream(path, [options])][3]

    Δημιουργεί ένα [WriteStream][4], το οποίο είναι βολικό επειδή δεν χρειάζεται να περιμένετε μια επανάκληση. Αλλά και πάλι, δεν είναι ρυθμισμένο.

Ένα [WriteStream][4], όπως λέει και το όνομά του, είναι μια ροή. Μια ροή εξ ορισμού είναι "ένας buffer" που περιέχει δεδομένα τα οποία κινούνται προς μία κατεύθυνση (πηγή ► προορισμός). Αλλά μια ροή με δυνατότητα εγγραφής δεν είναι απαραίτητα "buffered". Ένα stream είναι "buffered" όταν γράφετε n φορές, και τη στιγμή n+1, το stream στέλνει το buffer στον πυρήνα (επειδή είναι γεμάτο και πρέπει να ξεπλυθεί).

Με άλλα λόγια: "Ένας buffer" είναι το αντικείμενο. Το αν "αποθηκεύεται" ή όχι είναι μια ιδιότητα αυτού του αντικειμένου.

Αν κοιτάξετε τον κώδικα, το WriteStream κληρονομεί από ένα εγγράψιμο αντικείμενο Stream. Αν δώσετε προσοχή, θα δείτε πώς ξεπλένουν το περιεχόμενο- δεν έχουν κανένα σύστημα buffering.

Αν γράψετε ένα αλφαριθμητικό, μετατρέπεται σε buffer, και στη συνέχεια αποστέλλεται στο εγγενές επίπεδο και γράφεται στο δίσκο. Όταν γράφετε συμβολοσειρές, δεν'γεμίζουν κανένα buffer. Έτσι, αν το κάνετε:

Σχόλια (5)

Μπορείτε φυσικά να το κάνετε λίγο πιο προηγμένο. Μη μπλοκάρισμα, εγγραφή τμημάτων και κομματιών, όχι εγγραφή ολόκληρου του αρχείου με τη μία:

var fs = require('fs');
var stream = fs.createWriteStream("my_file.txt");
stream.once('open', function(fd) {
  stream.write("My first row\n");
  stream.write("My second row\n");
  stream.end();
});
Σχόλια (9)