【发布时间】:2012-12-24 00:12:15
【问题描述】:
In a previous question 似乎从 node.js 中的文件进行随机访问读取的唯一方法是使用 fs.createReadStream() 及其可选的 fd、start 和 end 字段。
这在我最简单的测试中运行良好。但在我的项目中,我需要反复读取二进制文件的不同偏移量。这以一种奇怪的方式失败了,所以我想出了一个最小的测试用例:
var fs = require('fs');
fs.open('test.txt', 'r', function (err, fd) {
if (err) {
console.error('error opening file: ' + err);
} else {
fs.createReadStream(null, {fd: fd, start: 2, end: 5}).on('error', function (err) {
throw e;
}).on('close', function () {
console.log('outer close');
}).on('data', function (data) {
console.log('outer data', data);
}).on('end', function () {
console.log('outer end');
fs.createReadStream(null, {fd: fd, start: 0, end: 3}).on('error', function (err) {
throw e;
}).on('close', function () {
console.log('inner close');
}).on('data', function (data) {
console.log('inner data', data);
}).on('end', function () {
console.log('inner end');
// more code to execute after both reads
});
});
}
});
从未收到内部end 事件。 (外层close接收不一致,但我不需要附加代码。)
我之前在 Perl 中甚至在 JavaScript 中作为 Firefox 扩展实现过这个项目,但在 node.js 下它被证明是困难的。这也是对我是否可以开始using node.js as a general purpose scripting language的测试。
【问题讨论】:
标签: node.js random-access