我有一个脚本可以将数据从 API 写入一些文件。我有一个包含每个文件的文件描述符的对象:

var csvFds = {
    'file1' : null,
    'file2' : null,
    'file3' : null,
    'file4' : null
};

for (var file in csvFds) {

    var dirPath = __dirname + '/files/' + file;

    try {
        fs.statSync(dirPath);
    }
    catch (e) {
        mkdirp.sync(dirPath, {mode: 0755});
    }

    csvFds[file] = fs.openSync(dirPath + '/' + moment().format("YYYY-MM-DDTHH:mm:ss[Z]") + '.csv', 'a+');
}

然后我有一些代码使用 fs.write 将 csv 行批量写入文件。这部分工作正常。我有格式良好的 csv 文件。现在我需要将整个文件的内容作为字符串读取。这就是我尝试这样做的方式:
fs.readFileSync(csvFds['file1']).toString();

但出于某种原因,我总是得到一个空字符串。我已经确认 fs.readFileSync 实际上是通过使用 console.log 并删除 toString() 方法返回一个缓冲区。

我真的坚持这一点,所以任何帮助将不胜感激。提前致谢。以下是有关我的 Node 版本和操作系统的一些附加信息:
$ node -v
v6.2.3-pre

$ uname -a
Darwin i-2.local 14.5.0 Darwin Kernel Version 14.5.0: Thu Jun 16 19:58:21 PDT 2016; root:xnu-2782.50.4~1/RELEASE_X86_64 x86_64

最佳答案

尝试像这样调用 readFileSync readFileSync(csvFds['file1'], 'utf-8') 。它应该返回一个字符串。或者您可以省略参数,然后在调用 toString 方法时提供编码,例如readFileSync(csvFds['file1']).toString('utf-8')

关于javascript - fs.readFileSync 总是返回空字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38859609/

10-11 18:02