file-disk v5.0.0-drop-aws-1b7b40e8f8a2e9a2e165f066f62bfaa6540175e2
file-disk
Handles reads / writes on disk image files.
API
Warning: The API exposed by this library is still forming and can change at any time!
FileDisk
new FileDisk(fd, readOnly, recordWrites, recordReads, discardIsZero=true)
fdis a file descriptor returned byfs.openreadOnlya boolean (defaultfalse)recordWrites, a boolean (defaultfalse); if you usereadOnlywithoutrecordWrites, all write requests will be lost.recordReads, a boolean (defaultfalse): cache reads in memorydiscardIsZero, a boolean (defaulttrue): don't read discarded regions, return zero filled buffers instead.
FileDisk.getCapacity(): Promise<Number>
FileDisk.read(buffer, bufferOffset, length, fileOffset): Promise<{ bytesRead: Number, buffer: Buffer }>
- behaves like fs.read
FileDisk.write(buffer, bufferOffset, length, fileOffset): Promise<{ bytesWritten: Number, buffer: Buffer }>
- behaves like fs.write
FileDisk.flush(): Promise<void>
- behaves like fs.fdatasync
FileDisk.discard(offset, length): Promise<void>
FileDisk.getStream([position, [length, [highWaterMark]]]): Promise<stream.Readable>
positionstart reading from this offset (defaults to 0)lengthread that amount of bytes (defaults to (disk capacity - position))highWaterMark(defaults to 16384, minimum 16) is the size of chunks that will be read
FileDisk.getDiscardedChunks() returns the list of discarded chunks. Each chunk
has a start and end properties. end position is inclusive.
FileDisk.getBlockMap(blockSize, calculateChecksums: Promise<blockmap.BlockMap>
- using the disk's discarded chunks and the given blockSize, it returns a Promise
of a
BlockMap. Be careful to how you useDisk'sdiscardIsZerooption as it may change the blockmap ranges checksums if discarded regions not aligned withblockSizecontain anything else than zeros on the disk.
S3Disk
S3Disk has been moved to a separate repository.
Examples
Read 1024 first bytes, write them starting at position 1024 then flush.
const Bluebird = require('bluebird');
const filedisk = require('file-disk');
Bluebird.using(filedisk.openFile('/path/to/some/file', 'r+'), async (fd) => {
const disk = new filedisk.FileDisk(fd)
// get file size
const size = await disk.getCapacity();
console.log("size:", size);
const buf = Buffer.alloc(1024);
// read `buf.length` bytes starting at 0 from the file into `buf`
const { bytesRead, buffer } = await disk.read(buf, 0, buf.length, 0);
// write `buffer` into file starting at `buffer.length` (in the file)
await disk.write(buf, 0, buf.length, buf.length);
// flush
await disk.flush();
});Open a file readOnly, use the recordWrites mode, then stream the contents somewhere.
const Bluebird = require('bluebird');
const filedisk = require('file-disk');
const BUF = Buffer.alloc(1024);
Bluebird.using(filedisk.openFile('/path/to/some/file', 'r'), async (fd) => {
const disk = new filedisk.FileDisk(fd, true, true);
let bytesRead, bytesWritten, buffer;
// read `BUF.length` bytes starting at 0 from the file into `BUF`
{ bytesRead, buffer } = await disk.read(BUF, 0, BUF.length, 0);
// write `buffer` into file starting at `buffer.length` (in the file)
{ bytesWritten, buffer } = await disk.write(buffer, 0, buffer.length, buffer.length);
const buf2 = Buffer.alloc(1024);
// read what we've just written
{ bytesRead, buffer } = await disk.read(buf2, 0, buffer.length, 0);
// writes are stored in memory
assert(BUF.equals(buffer));
const stream = await disk.getStream();
// pipe the stream somewhere
await new Bluebird((resolve, reject) => {
stream.pipe(someWritableStream)
.on('close', resolve)
.on('error', reject);
});
});5 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago