javascript - NodeJS 基本文件 IO

标签 javascript windows node.js file-io

只是测试 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);
    }
});

最佳答案

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

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

关于javascript - NodeJS 基本文件 IO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10965562/

相关文章:

c++ - 为什么 SetUnhandledExceptionFilter 无法捕获某些异常但 AddVectoredExceptionHandler 可以

c++ - 如何在 C++ (VS2010) 中设置超时读取 USB 端口?

javascript - 使用 jQuery 处理鼠标左右键的点击

javascript - 图形折线图

windows - 从 Windows 中的\文件夹中删除非 native 计划任务

php - Node.js + Socket IO + Apache + PHP 从 url 中删除端口?

javascript - Node.js 循环数据库插入

javascript - 创建导致错误的自引用模型记录

javascript - 日历 Bootstrap

Javascript 实例和这个