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