javascript - fs.readFileSync 始终返回空字符串

标签 javascript node.js file io

我有一个脚本,可以将数据从 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

最佳答案

对于有同样问题的其他人。

对我来说,获得非空字符串的唯一方法是使用 fs.readFile 而不是 fs.readFileSync。

我使用 Mac,我试图读取 Node 自行创建的文件。如果我尝试读取另一个文件,它就会起作用。

fs.readFile(file, (err, data)=>{
    if(err){
        console.log(err)
        throw err
    }else{
        let file_content = data.toString('utf8')
        // your code here
    }
})

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

相关文章:

javascript - 如何在 Electron Js 项目中使用母版页

javascript - rails 2 : RJS - Javascript events are not working when on page updates remotely

javascript - 使用 jquery 递增

Javascript/jQuery if 语句不比较任何内容

javascript - mocha 测试需要外部 js 文件

node.js - 环境变量存储在 node.js 中的什么位置?

ruby - 如何以正确的格式写入 JSON 文件

c# - 生成图像后打印图像 [c#]

C++ 将变量添加到 vector 列表时出现问题

javascript - AngularJS : Change URL, 但不是浏览器后退和前进按钮的 Controller 或模板加载