Skip to content

readFile(fd) does not read the whole file (at least on Windows, possibly other platforms) #9671

Description

@jorangreef
  • Version: v7.1.0
  • Platform: Windows 10 64-bit
  • Subsystem: fs

I wrote a small test that passes on Mac and Linux but throws on Windows:

varfs=require('fs');varbuffer=Buffer.alloc(8192);varpath='test-sparse-read-file';varfd=fs.openSync(path,'w+');console.log('created or truncated, sparse file size is now: '+fs.fstatSync(fd).size);console.log('writing 1 byte at offset '+(8192-1));fs.writeSync(fd,Buffer.alloc(1,1),0,1,8192-1);console.log('sparse file size is now: '+fs.fstatSync(fd).size+'\r\n');console.log('reading 8192 bytes using readSync()...');varbytesRead=fs.readSync(fd,buffer,0,8192,0);if(bytesRead!==8192){thrownewError('readSync() read '+bytesRead+' bytes');}else{console.log('readSync() read '+bytesRead+' bytes');}console.log('\r\nreading entire file using readFileSync()...');varresult=fs.readFileSync(fd);if(result.length!==buffer.length){thrownewError('readFileSync returned a buffer with length '+result.length);}else{console.log('readFileSync returned a buffer with length '+result.length);}fs.closeSync(fd);fs.unlinkSync(path);console.log('\r\nPASSED');

Linux:

created or truncated, sparse file size is now: 0
writing 1 byte at offset 8191
sparse file size is now: 8192
reading 8192 bytes using readSync()...
readSync() read 8192 bytes
reading entire file using readFileSync()...
readFileSync returned a buffer with length 8192
PASSED

Windows:

created or truncated, sparse file size is now: 0
writing 1 byte at offset 8191
sparse file size is now: 8192
reading 8192 bytes using readSync()...
readSync() read 8192 bytes
reading entire file using readFileSync()...
C:\Users\Joran\test-sparse.js:22
throw new Error('readFileSync returned a buffer with length ' + result.length);
^
Error: readFileSync returned a buffer with length 0
at Object.<anonymous> (C:\Users\Joran\test-sparse.js:22:9)
at Module._compile (module.js:573:32)
at Object.Module._extensions..js (module.js:582:10)
at Module.load (module.js:490:32)
at tryModuleLoad (module.js:449:12)
at Function.Module._load (module.js:441:3)
at Module.runMain (module.js:607:10)
at run (bootstrap_node.js:420:7)
at startup (bootstrap_node.js:139:9)
at bootstrap_node.js:535:3

The test shows that the problem does not appear to be with read() but only with readFileSync().

readFile() has the same issue.

Metadata

Metadata

Assignees

No one assigned

    Labels

    confirmed-bugIssues with confirmed bugs.fsIssues and PRs related to the fs subsystem / file system.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions