2012-06-10 10 views
5

Appena testato NodeJS e sto ancora imparando a pensare in javascript, come posso far funzionare questa operazione di base FileIO qui sotto?NodeJS Basic FileIO

Ecco cosa mi piacerebbe che fare:

  • Leggi file XML (letto nella memoria)
  • mettere tutto contenuto in un
  • Scrivi file XML variabile da variabile
  • uscita dovrebbe essere lo stesso file originale
var fs = require('fs'); 
var filepath = 'c:\/testin.xml'; 

fs.readFile(filepath, 'utf8', function(err, data) { 
    if(err) { 
     console.error("Could not open file: %s", err); 
    } 
}); 

fs.writeFile('c:\/testout.xml', data, function(err) { 
    if(err) { 
     console.error("Could not write file: %s", err); 
    } 
}); 
+3

Non è necessario sfuggire alle barre in avanti. – ThiefMaster

risposta

11

Il problema con il codice è che si tenta di scrivere i dati letti nel file di destinazione prima che sia stato letto - tali operazioni sono asincrone.

sufficiente spostare il codice del file-scrittura nella richiamata dell'operazione readFile:

fs.readFile(filepath, 'utf8', function(err, data) { 
    if(err) { 
     console.error("Could not open file: %s", err); 
     return; 
    } 
    fs.writeFile('c:/testout.xml', data, function(err) { 
     if(err) { 
      console.error("Could not write file: %s", err); 
     } 
    }); 
}); 

Un'altra opzione sarebbe utilizzando readFileSync() - ma che sarebbe una cattiva idea a seconda di quando lo si fa (per esempio, se il l'eeprazione è causata da una richiesta HTTP di un utente)

var data = fs.readFileSync(filepath, 'utf-8'); 
fs.writeFileSync('c:/testout.xml', data);