Προσπαθώ να βρω έναν τρόπο να γράψω σε ένα αρχείο όταν χρησιμοποιώ το 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!");
});
Επί του παρόντος υπάρχουν τρεις τρόποι για να γράψετε ένα αρχείο:
[fs.write(fd, buffer, offset, length, position, callback
)][1]
Πρέπει να περιμένετε την επανάκληση για να διασφαλίσετε ότι ο buffer έχει εγγραφεί στο δίσκο. Δεν έχει ρυθμιστικό χώρο αποθήκευσης.
[fs.writeFile(filename, data, [encoding], callback)
][2]
Όλα τα δεδομένα πρέπει να αποθηκεύονται ταυτόχρονα- δεν μπορείτε να εκτελέσετε διαδοχικές εγγραφές.
[fs.createWriteStream(path, [options]
)][3]
Δημιουργεί ένα [WriteStream
][4], το οποίο είναι βολικό επειδή δεν χρειάζεται να περιμένετε μια επανάκληση. Αλλά και πάλι, δεν είναι ρυθμισμένο.
Ένα [WriteStream
][4], όπως λέει και το όνομά του, είναι μια ροή. Μια ροή εξ ορισμού είναι "ένας buffer" που περιέχει δεδομένα τα οποία κινούνται προς μία κατεύθυνση (πηγή ► προορισμός). Αλλά μια ροή με δυνατότητα εγγραφής δεν είναι απαραίτητα "buffered". Ένα stream είναι "buffered" όταν γράφετε n
φορές, και τη στιγμή n+1
, το stream στέλνει το buffer στον πυρήνα (επειδή είναι γεμάτο και πρέπει να ξεπλυθεί).
Με άλλα λόγια: "Ένας buffer" είναι το αντικείμενο. Το αν "αποθηκεύεται" ή όχι είναι μια ιδιότητα αυτού του αντικειμένου.
Αν κοιτάξετε τον κώδικα, το WriteStream
κληρονομεί από ένα εγγράψιμο αντικείμενο Stream
. Αν δώσετε προσοχή, θα δείτε πώς ξεπλένουν το περιεχόμενο- δεν έχουν κανένα σύστημα buffering.
Αν γράψετε ένα αλφαριθμητικό, μετατρέπεται σε buffer, και στη συνέχεια αποστέλλεται στο εγγενές επίπεδο και γράφεται στο δίσκο. Όταν γράφετε συμβολοσειρές, δεν'γεμίζουν κανένα buffer. Έτσι, αν το κάνετε: