node.js - fs.readFile().toString 以空字符串终止

标签 node.js buffer tostring string-length

以下 Node 脚本 (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 );',
'' ]

这是预期的行为吗?我在 Node 文档中看不到它的报告。

最佳答案

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

$ 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 的行为。

关于node.js - fs.readFile().toString 以空字符串终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18986026/

相关文章:

C#:为什么 ShowDialog().ToString() 不返回预期的字符串?

node.js - Node 子进程生成标准输出返回为空

node.js - Dockerized MongoDB 无法从 NodeJs 容器连接到 Heroku

c++ - 在 emacs 中运行命令,在可点击缓冲区中获取输出

java - 打开缓冲对象流时出现 EOFException

Java: "The JAR file has no attachment"错误,但仅当我重写 toString() 方法时

node.js - 在 Windows 中找不到本地安装的模块

javascript - 如何正确要求同一目录中的 JS 文件?

c# - 由于极不可能的情况发生而丢失数据包?

java - 在 toString 中使用 equals 或 instanceof