45 lines
914 B
JavaScript
45 lines
914 B
JavaScript
|
'use strict';
|
||
|
const fs = require('fs');
|
||
|
const pify = require('pify');
|
||
|
const Buffer = require('safe-buffer').Buffer;
|
||
|
|
||
|
const fsP = pify(fs);
|
||
|
const fsReadP = pify(fs.read, {multiArgs: true});
|
||
|
|
||
|
module.exports = (filepath, pos, len) => {
|
||
|
const buf = Buffer.alloc(len);
|
||
|
|
||
|
return fsP.open(filepath, 'r')
|
||
|
.then(fd =>
|
||
|
fsReadP(fd, buf, 0, len, pos)
|
||
|
.then(readArgs => fsP.close(fd)
|
||
|
.then(() => readArgs))
|
||
|
)
|
||
|
.then(readArgs => {
|
||
|
// TODO: Use destructuring when Node.js 6 is target
|
||
|
const bytesRead = readArgs[0];
|
||
|
let buf = readArgs[1];
|
||
|
|
||
|
if (bytesRead < len) {
|
||
|
buf = buf.slice(0, bytesRead);
|
||
|
}
|
||
|
|
||
|
return buf;
|
||
|
});
|
||
|
};
|
||
|
|
||
|
module.exports.sync = (filepath, pos, len) => {
|
||
|
let buf = Buffer.alloc(len);
|
||
|
|
||
|
const fd = fs.openSync(filepath, 'r');
|
||
|
const bytesRead = fs.readSync(fd, buf, 0, len, pos);
|
||
|
|
||
|
fs.closeSync(fd);
|
||
|
|
||
|
if (bytesRead < len) {
|
||
|
buf = buf.slice(0, bytesRead);
|
||
|
}
|
||
|
|
||
|
return buf;
|
||
|
};
|