2015-07-02 2 views
5

Vorrei creare un file foobar. Tuttavia, se l'utente ha già un file denominato foobar, non desidero sovrascriverlo. Quindi voglio creare solo foobar se non esiste già.Creare un file se non esiste già

In un primo momento, ho pensato che avrei dovuto fare questo:

fs.exists(filename, function(exists) { 
    if(exists) { 
    // Create file 
    } 
    else { 
    console.log("Refusing to overwrite existing", filename); 
    } 
}); 

Tuttavia, guardando il official documentation per fs.exists, si legge:

fs.exists() è un anacronismo ed esiste solo per ragioni storiche. Non ci dovrebbe quasi mai essere un motivo per usarlo nel proprio codice.

In particolare, verificare se esiste un file prima di aprirlo è un anti-modello che ti lascia vulnerabili a condizioni di gara: altro processo può rimuovere il file tra le chiamate a fs.exists() e fs.open(). Basta aprire il file e gestire l'errore quando non è lì.

fs.exists() sarà deprecato.

Chiaramente gli sviluppatori del nodo pensano che il mio metodo sia una cattiva idea. Inoltre, non voglio usare una funzione che sarà deprecata.

Come posso creare un file senza scrivere su uno esistente?

+1

indica: apre il file e gestisce l'errore (o la sua mancanza) – dandavis

risposta

11

Penso che la risposta è:

basta aprire il file e gestire l'errore quando non c'è.

provare qualcosa di simile:

function createFile(filename) { 
    fs.open(filename,'r',function(err, fd){ 
    if (err) { 
     fs.writeFile(filename, '', function(err) { 
      if(err) { 
       console.log(err); 
      } 
      console.log("The file was saved!"); 
     }); 
    } else { 
     console.log("The file exists!"); 
    } 
    }); 
} 
0

Se si desidera scrivere i dati in questo file in seguito, è possibile utilizzare fs.appendFile('message.txt', 'data to append', 'utf8', callback);.

in modo asincrono aggiungere dati in un file, creando il file se non esiste ancora. I dati possono essere una stringa o un buffer.

Node file system documentation.

5
fs.closeSync(fs.openSync('/var/log/my.log', 'a'))