Aprire un file con open e File Descriptor - Modulo fs di NodeJS
Per avere un maggior controllo sulla modifica dei file, la loro apertura, lettura ecc.. possiamo usare anche altri metodi.
Il metodo open
Per aprire un file in modo asincrono possiamo usare open, ed in un secondo momento facendo le operazioni necessarie di lettura / scrittura.
Il metodo open prevede fino a 4 parametri
- file: indica il file che vogliamo aprire (percorso + nome file)
- flag di apertura (opzionale): indica se vogliamo aprire il file in lettura, scrittura o lettura + scrittura
- mode : indica i permessi da assegnare al file (solo se il file non esiste cioè viene creato in fase di invocazione di open)
- callback
Esempio con metodo Open
Vediamo come creare un file con il metodo open, inserire del contenuto al suo interno, gestire gli eventuali errori e chiudere il file dopo la scrittura.
metodo-open.js
const fs = require('fs');
fs.open('fileCreato.txt', 'w' , (err, fd) =>{
fs.write(fd, 'Contenuto inserito' , 'utf8' , (err, written,str) => {
console.log(err,written,str);
});
fs.close(fd, err =>{
if(err) throw err;
})
});
Spiegazione step by step:
const fs = require('fs');
Importiamo il modulo nativo fs di node
fs.open('fileCreato.txt', 'w' , (err, fd) =>{
passiamo come primo parametro il file (inesistente) e come secondo parametro la callback di gestione che riceverà come primo parametro l'oggetto err se ci sono errori e come secondo parametro fd (file descriptor = cioè un numero identificativo di un file aperto) .
fs.write(fd, 'Contenuto inserito' , 'utf8' , (err, written,str) => {
console.log(err,written,str);
Se vogliamo effettuare un operazione di scrittura sul file, possiamo usare fs.write, ed invece di indicare il percorso del file indichiamo il file descriptor, come secondo parametro il contenuto che vogliamo scrivere all'interno del file, come terzo parametro la codifica del file (utf8) e come quarto parametro la callback che riceverà l'oggetto err, written per il numero di bite scritti e str per indicare il contenuto appena scritto
fs.close(fd, err =>{
if(err) throw err;
})
Per chiudere un file aperto, usiamo semplicemente close, passando come primo parametro il file descriptor e come secondo parametro la callback che riceverà l'oggetto err.