2012-06-10 11 views
5

Simplemente probando NodeJS y aún aprendiendo a pensar en javascript, ¿cómo puedo obtener esta operación básica de FileIO a continuación?NodeJS Basic FileIO

Aquí es lo que me gusta hacer:

  • archivo XML Read (lee en la memoria)
  • poner todos contenidos en una variable
  • Escribir archivo XML a partir de la variable
  • salida debe ser el mismo que el archivo original
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

No es necesario que escape las barras diagonales. – ThiefMaster

Respuesta

11

El problema con el código es que intenta escribir los datos que lee en el archivo de destino antes de que se lean, esas operaciones son asincrónicas.

Basta con mover el código del archivo-escritura en la devolución de llamada de la operación 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); 
     } 
    }); 
}); 

Otra opción sería utilizar readFileSync() - pero eso sería una mala idea dependiendo de cuando se hace eso (por ejemplo, si el oepration es causada por una solicitud HTTP de un usuario)

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