# Open > Open a file.
## Usage ```javascript var open = require( '@stdlib/fs/open' ); ``` #### open( path\[, flags\[, mode]], clbk ) Asynchronously opens a file. ```javascript var closeSync = require( '@stdlib/fs/close' ).sync; open( __filename, onOpen ); function onOpen( error, fd ) { if ( error ) { console.error( error.message ); } else { closeSync( fd ); } } ``` The function has the same default parameter values as [`fs.open()`][node-fs]. #### open.sync( file\[, flags\[, mode]] ) Synchronously opens a `file`. ```javascript var closeSync = require( '@stdlib/fs/close' ).sync; var fd = open.sync( __filename ); if ( fd instanceof Error ) { console.error( fd.message ); } else { closeSync( fd ); } ``` The function has the same default parameters as [`fs.openSync()`][node-fs].
## Notes - The difference between this API and [`fs.openSync()`][node-fs] is that [`fs.openSync()`][node-fs] will throw if an `error` is encountered (e.g., if given a non-existent `path`) and this API will return an `error`. Hence, the following anti-pattern ```javascript var fs = require( 'fs' ); var fpath = '/path/to/file.js'; var fd; // Check for existence to prevent an error being thrown... if ( fs.existsSync( fpath ) ) { fd = fs.readFileSync( fpath ); } ``` can be replaced by an approach which addresses existence via `error` handling. ```javascript var open = require( '@stdlib/fs/open' ); var fpath = '/path/to/file.js'; // Explicitly handle the error... var fd = open.sync( fpath ); if ( fd instanceof Error ) { // You choose what to do... console.error( fd.message ); } ```
## Examples ```javascript var join = require( 'path' ).join; var closeSync = require( '@stdlib/fs/close' ).sync; var open = require( '@stdlib/fs/open' ); /* Sync */ var fd = open.sync( join( __dirname, 'package.json' ), 'r+' ); // returns if ( fd instanceof Error ) { console.error( fd.message ); } else { closeSync( fd ); } fd = open.sync( 'beepboop' ); // returns /* Async */ open( join( __dirname, 'package.json' ), onOpen ); open( 'beepboop', onOpen ); function onOpen( error, fd ) { if ( error ) { if ( error.code === 'ENOENT' ) { console.error( 'File does not exist.' ); } else { console.error( error.message ); } } else { closeSync( fd ); } } ```