Socket
Socket
Sign inDemoInstall

file-disk

Package Overview
Dependencies
1
Maintainers
1
Versions
47
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    file-disk

Handles reads / writes on disk image files.


Version published
Maintainers
1
Install size
92.6 kB
Created

Changelog

Source

v8.0.1

(2020-11-26)

  • Add versionbot changelog [Alexis Svinartchouk]

Readme

Source

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)

  • fd is a file descriptor returned by fs.open
  • readOnly a boolean (default false)
  • recordWrites, a boolean (default false); if you use readOnly without recordWrites, all write requests will be lost.
  • recordReads, a boolean (default false): cache reads in memory
  • discardIsZero, a boolean (default true): 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 }>

FileDisk.flush(): Promise<void>

FileDisk.discard(offset, length): Promise<void>

FileDisk.getStream([position, [length, [highWaterMark]]]): Promise<stream.Readable>

  • position start reading from this offset (defaults to 0)
  • length read 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.getRanges(blockSize): Promise<Range[]>

  • using the disk's discarded chunks and the given blockSize, it returns a Promise of an array of Ranges: { offset: number, length: number }.

S3Disk

S3Disk has been moved to a separate repository.

Examples

Read 1024 first bytes, write them starting at position 1024 then flush.


const filedisk = require('file-disk');

await filedisk.withOpenFile('/path/to/some/file', 'r+', async (handle) => {
	const disk = new filedisk.FileDisk(handle)

	// 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 filedisk = require('file-disk');

const BUF = Buffer.alloc(1024);

await filedisk.withOpenFile('/path/to/some/file', 'r', async (handle) => {
	const disk = new filedisk.FileDisk(handle, 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 Promise((resolve, reject) => {
		stream.pipe(someWritableStream)
		.on('close', resolve)
		.on('error', reject);
	});
});

FAQs

Last updated on 26 Nov 2020

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc