2016-05-12 21 views
5

lima + Al momento sto utilizzando fs.createWriteStream(filePath) di fare due cose:Node.js - modo più efficiente per creare il file chiaro

  1. Creare il file se non esiste
  2. Chiaro/cancella il contenuto del file

Tuttavia, in realtà non scrivo mai nello stream, quindi non lo uso veramente. Mi chiedo quanto sia kosher, e se dovessi usare un metodo più efficiente o più esplicito per creare il file se non esiste e svuotare il file. Qualche idea?

+3

'fs.open()' con i flag ''w'' o ''' w + ''creerà anche/tronca il file. Non è chiaro quale domanda tu stia davvero chiedendo. – jfriend00

+0

'fs.open()' con 'w +' sembra essere il modo: * 'w +' - Apri il file per leggere e scrivere. Il file viene creato (se non esiste) o troncato (se esiste). * – Shanoor

+0

ok, fs.open() potrebbe essere quello, puoi aggiungere una risposta? –

risposta

5

Per la richiesta, la pubblicazione il mio commento come risposta ...

fs.open(filePath, 'w+') utilizzando i 'w' o 'w+' bandiere potranno anche creare/troncare il file.

Non penso che in realtà vi darà un risultato diverso da quello del vostro fs.createWriteStream(filePath) e la differenza di esecuzione del codice è probabilmente insignificante, soprattutto dato che l'I/O del disco è coinvolto. Ma potrebbe sembrare un po 'più pulito poiché non sta configurando un flusso che non userete.

+0

@AlexMills - Questo ha risposto alla tua domanda? – jfriend00

1

È meglio non aprire un file a meno che non ci si scriva effettivamente. È possibile scrivere alcune funzioni wrapper per aprire e scrivere per ritardare l'apertura del file finché non è necessaria una scrittura.

var fd; 

function open() { 
    if (fd) { 
     return; 
    } 
    fd = fs.open(filePath, 'w'); 
} 

function write(buffer) { 
    if (!fd) { 
     open(); 
     fs.writeFile(fd, buffer); 
    } else { 
     fs.write(fd, buffer); 
    } 
} 


write('open file and write'); 
write('write to already opened file'); 

Durante l'apertura, utilizzare fs.open con il flag 'w', che significa che il file viene creato (se non esiste) o troncato (se esiste).

Un altro modo è per la funzione write() di chiamare fs.writeFile quando si scrive sul file per la prima volta, questo sovrascrive il contenuto esistente del file e chiama fs.write nelle scritture successive da aggiungere.

In termini reali ci dovrebbe essere poca differenza di prestazioni tra l'uso di writeFile() e write(), ma consente di evitare di verificare se il file esiste, eliminarlo se lo fa e creare un nuovo file.

Suppongo che tu abbia solo un processo che accede a questo file alla volta.

+1

questo va bene, ma in realtà non risponde alla domanda, nessun downvote, ma nessuna upvote sia –

+0

Ho aggiornato la risposta per dire che il metodo più efficace è quello di non aprire il file finché non hai bisogno di scriverci sopra, e lì dovrebbero essere alcuni guadagni di prestazioni, anche se marginali, per usare fs.writeFile()/fs.write() invece di fs.exists(), fs.unlink(), fs.write() semplicemente perché ci sono meno passaggi coinvolti. –

3

È possibile utilizzare direttamente

fs.writeFile('file path',<data to write>,'encoding',callback) //in your case data is empty 

Si creerà il file se non esiste e se esiste poi pugno cancellare il contenuto e l'aggiungere nuovi contenuti ad esso

+1

e se lo si desidera sincronizzare, utilizzare fs.writeFileSync ('percorso file', , 'encoding') –