5

刚刚测试了 NodeJS 并且还在学习用 javascript 思考,我怎样才能让下面的这个基本 FileIO 操作正常工作?

这就是我想要它做的事情:

  • 读取 XML 文件(读入内存)
  • 将所有内容放入变量中
  • 从变量写入 XML 文件
  • 输出应与原始文件相同
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);
    }
});
4

1 回答 1

11

您的代码的问题是您尝试在读取之前将读取的数据写入目标文件 - 这些操作是异步的。

只需将文件写入代码移动到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);
        }
    });
});

另一种选择是使用readFileSync()- 但这将是一个坏主意,具体取决于您何时执行此操作(例如,如果操作是由来自用户的 HTTP 请求引起的)

var data = fs.readFileSync(filepath, 'utf-8');
fs.writeFileSync('c:/testout.xml', data);
于 2012-06-10T00:29:02.837 回答