Περισσότερα
Εγγραφή αρχείων στο Node.js
Προσπαθώ να βρω έναν τρόπο να γράψω σε ένα αρχείο όταν χρησιμοποιώ το Node.js, αλλά χωρίς επιτυχία. Πώς μπορώ να το κάνω αυτό;
1526
3
Υπάρχουν πολλές λεπτομέρειες στο File System API. Ο πιο συνηθισμένος τρόπος είναι:
Επί του παρόντος υπάρχουν τρεις τρόποι για να γράψετε ένα αρχείο:
[
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. Έτσι, αν το κάνετε:
Μπορείτε φυσικά να το κάνετε λίγο πιο προηγμένο. Μη μπλοκάρισμα, εγγραφή τμημάτων και κομματιών, όχι εγγραφή ολόκληρου του αρχείου με τη μία: