2012-06-10 10 views
5

Właśnie testując NodeJS i wciąż ucząc się myśleć w javascript, jak mogę uruchomić poniższą podstawową operację FileIO?NodeJS Basic FileIO

Oto co chciałbym to zrobić:

  • odczytać pliku XML (wczytywane do pamięci)
  • umieścić całą zawartość do zmiennej
  • pliku Zapis XML od zmiennej
  • wyjście powinno być taki sam jak oryginalny plik
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

Nie musisz uciekać przed ukośnikami. – ThiefMaster

Odpowiedz

11

Problem z kodem polega na tym, że próbujesz zapisać dane, które odczytałeś, do pliku docelowego, zanim zostanie on odczytany - te operacje są asynchroniczne.

Wystarczy przesunąć kod pliku pisanie do zwrotnego operacji 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); 
     } 
    }); 
}); 

Inną opcją byłoby korzystania readFileSync() - ale to byłoby złym pomysłem zależności od tego kiedy to zrobić (na przykład, jeśli oepracja jest spowodowana przez żądanie HTTP od użytkownika)

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