fs.readFile()。toString以空字符串结尾

时间:2013-09-24 15:36:23

标签: node.js buffer tostring string-length

以下节点脚本(wc.js)返回一个与unix实用程序wc不同的值;

fs = require('fs');
//console.log(fs.readFileSync(process.argv[2]).toString().split('\n') );
console.log(fs.readFileSync(process.argv[2]).toString().split('\n').length );

输出本身就是:

vagrant@precise32:~/stuff$ wc -l wc.js
3 wc.js
vagrant@precise32:~/stuff$ node wc.js wc.js
4

并且通过打印数组,似乎文件被一个额外的空字符串终止:

vagrant@precise32:~/stuff$ node wc.js wc.js
[ 'fs = require(\'fs\');',
'console.log(fs.readFileSync(process.argv[2]).toString().split(\'\\n\') );',
'//console.log(fs.readFileSync(process.argv[2]).toString().split(\'\\n\').length );',
'' ]

这是预期的行为吗?我无法在节点文档中看到它。

1 个答案:

答案 0 :(得分:0)

您确定文件末尾没有尾随的换行符吗?

$ node wc.js wc.js
[ 'fs = require(\'fs\');',
  'console.log(fs.readFileSync(process.argv[2]).toString().split(\'\\n\') );',
  '// console.log(fs.readFileSync(process.argv[2]).toString().split(\'\\n\').length );' ]

您可以忽略.replace(/\n$/, '')的最后一个换行符,我认为这是wc的行为。