2012-02-27 20:09:33 +01:00
|
|
|
# File System
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2015-02-25 01:15:26 +01:00
|
|
|
Stability: 2 - Stable
|
2012-03-03 00:14:03 +01:00
|
|
|
|
2012-03-04 02:14:06 +01:00
|
|
|
<!--name=fs-->
|
|
|
|
|
2010-10-28 14:18:16 +02:00
|
|
|
File I/O is provided by simple wrappers around standard POSIX functions. To
|
|
|
|
use this module do `require('fs')`. All the methods have asynchronous and
|
2010-11-21 23:22:34 +01:00
|
|
|
synchronous forms.
|
2010-10-28 14:18:16 +02:00
|
|
|
|
|
|
|
The asynchronous form always take a completion callback as its last argument.
|
|
|
|
The arguments passed to the completion callback depend on the method, but the
|
|
|
|
first argument is always reserved for an exception. If the operation was
|
|
|
|
completed successfully, then the first argument will be `null` or `undefined`.
|
|
|
|
|
2011-08-31 15:12:34 +02:00
|
|
|
When using the synchronous form any exceptions are immediately thrown.
|
|
|
|
You can use try/catch to handle exceptions or allow them to bubble up.
|
|
|
|
|
2010-10-28 14:18:16 +02:00
|
|
|
Here is an example of the asynchronous version:
|
|
|
|
|
|
|
|
var fs = require('fs');
|
|
|
|
|
|
|
|
fs.unlink('/tmp/hello', function (err) {
|
|
|
|
if (err) throw err;
|
|
|
|
console.log('successfully deleted /tmp/hello');
|
|
|
|
});
|
|
|
|
|
|
|
|
Here is the synchronous version:
|
|
|
|
|
|
|
|
var fs = require('fs');
|
|
|
|
|
2015-02-12 08:25:01 +01:00
|
|
|
fs.unlinkSync('/tmp/hello');
|
2010-10-28 14:18:16 +02:00
|
|
|
console.log('successfully deleted /tmp/hello');
|
|
|
|
|
|
|
|
With the asynchronous methods there is no guaranteed ordering. So the
|
|
|
|
following is prone to error:
|
|
|
|
|
|
|
|
fs.rename('/tmp/hello', '/tmp/world', function (err) {
|
|
|
|
if (err) throw err;
|
|
|
|
console.log('renamed complete');
|
|
|
|
});
|
|
|
|
fs.stat('/tmp/world', function (err, stats) {
|
|
|
|
if (err) throw err;
|
|
|
|
console.log('stats: ' + JSON.stringify(stats));
|
|
|
|
});
|
|
|
|
|
|
|
|
It could be that `fs.stat` is executed before `fs.rename`.
|
|
|
|
The correct way to do this is to chain the callbacks.
|
|
|
|
|
|
|
|
fs.rename('/tmp/hello', '/tmp/world', function (err) {
|
|
|
|
if (err) throw err;
|
|
|
|
fs.stat('/tmp/world', function (err, stats) {
|
|
|
|
if (err) throw err;
|
|
|
|
console.log('stats: ' + JSON.stringify(stats));
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
In busy processes, the programmer is _strongly encouraged_ to use the
|
|
|
|
asynchronous versions of these calls. The synchronous versions will block
|
|
|
|
the entire process until they complete--halting all connections.
|
|
|
|
|
2012-12-04 03:17:52 +01:00
|
|
|
Relative path to filename can be used, remember however that this path will be
|
|
|
|
relative to `process.cwd()`.
|
|
|
|
|
|
|
|
Most fs functions let you omit the callback argument. If you do, a default
|
2013-03-13 23:36:52 +01:00
|
|
|
callback is used that rethrows errors. To get a trace to the original call
|
|
|
|
site, set the NODE_DEBUG environment variable:
|
|
|
|
|
|
|
|
$ cat script.js
|
|
|
|
function bad() {
|
|
|
|
require('fs').readFile('/');
|
|
|
|
}
|
|
|
|
bad();
|
|
|
|
|
2015-02-07 11:25:13 +01:00
|
|
|
$ env NODE_DEBUG=fs iojs script.js
|
2013-03-13 23:36:52 +01:00
|
|
|
fs.js:66
|
|
|
|
throw err;
|
|
|
|
^
|
|
|
|
Error: EISDIR, read
|
|
|
|
at rethrow (fs.js:61:21)
|
|
|
|
at maybeCallback (fs.js:79:42)
|
|
|
|
at Object.fs.readFile (fs.js:153:18)
|
|
|
|
at bad (/path/to/script.js:2:17)
|
|
|
|
at Object.<anonymous> (/path/to/script.js:5:1)
|
|
|
|
<etc.>
|
2012-12-04 03:17:52 +01:00
|
|
|
|
2011-07-14 13:17:40 +02:00
|
|
|
|
2013-03-14 15:57:13 +01:00
|
|
|
## fs.rename(oldPath, newPath, callback)
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2010-11-21 23:22:34 +01:00
|
|
|
Asynchronous rename(2). No arguments other than a possible exception are given
|
2010-11-17 17:04:21 +01:00
|
|
|
to the completion callback.
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2012-04-16 07:24:25 +02:00
|
|
|
## fs.renameSync(oldPath, newPath)
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2015-03-08 03:52:18 +01:00
|
|
|
Synchronous rename(2). Returns `undefined`.
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2013-03-14 15:57:13 +01:00
|
|
|
## fs.ftruncate(fd, len, callback)
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2010-11-21 23:22:34 +01:00
|
|
|
Asynchronous ftruncate(2). No arguments other than a possible exception are
|
2010-11-17 17:04:21 +01:00
|
|
|
given to the completion callback.
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2012-08-04 21:39:11 +02:00
|
|
|
## fs.ftruncateSync(fd, len)
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2015-03-08 03:52:18 +01:00
|
|
|
Synchronous ftruncate(2). Returns `undefined`.
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2013-03-14 15:57:13 +01:00
|
|
|
## fs.truncate(path, len, callback)
|
2012-08-04 21:39:11 +02:00
|
|
|
|
|
|
|
Asynchronous truncate(2). No arguments other than a possible exception are
|
2015-02-07 19:27:20 +01:00
|
|
|
given to the completion callback. A file descriptor can also be passed as the
|
|
|
|
first argument. In this case, `fs.ftruncate()` is called.
|
2012-08-04 21:39:11 +02:00
|
|
|
|
|
|
|
## fs.truncateSync(path, len)
|
|
|
|
|
2015-03-08 03:52:18 +01:00
|
|
|
Synchronous truncate(2). Returns `undefined`.
|
2012-08-04 21:39:11 +02:00
|
|
|
|
2013-03-14 15:57:13 +01:00
|
|
|
## fs.chown(path, uid, gid, callback)
|
2011-04-02 02:46:18 +02:00
|
|
|
|
2011-08-31 15:12:34 +02:00
|
|
|
Asynchronous chown(2). No arguments other than a possible exception are given
|
2011-04-02 02:46:18 +02:00
|
|
|
to the completion callback.
|
|
|
|
|
2012-02-27 20:09:33 +01:00
|
|
|
## fs.chownSync(path, uid, gid)
|
2011-04-02 02:46:18 +02:00
|
|
|
|
2015-03-08 03:52:18 +01:00
|
|
|
Synchronous chown(2). Returns `undefined`.
|
2011-04-02 02:46:18 +02:00
|
|
|
|
2013-03-14 15:57:13 +01:00
|
|
|
## fs.fchown(fd, uid, gid, callback)
|
2011-04-02 02:46:18 +02:00
|
|
|
|
2011-08-31 15:12:34 +02:00
|
|
|
Asynchronous fchown(2). No arguments other than a possible exception are given
|
2011-04-02 02:46:18 +02:00
|
|
|
to the completion callback.
|
|
|
|
|
2012-02-27 20:09:33 +01:00
|
|
|
## fs.fchownSync(fd, uid, gid)
|
2011-04-02 02:46:18 +02:00
|
|
|
|
2015-03-08 03:52:18 +01:00
|
|
|
Synchronous fchown(2). Returns `undefined`.
|
2011-04-02 02:46:18 +02:00
|
|
|
|
2013-03-14 15:57:13 +01:00
|
|
|
## fs.lchown(path, uid, gid, callback)
|
2011-04-02 02:46:18 +02:00
|
|
|
|
2011-08-31 15:12:34 +02:00
|
|
|
Asynchronous lchown(2). No arguments other than a possible exception are given
|
2011-04-02 02:46:18 +02:00
|
|
|
to the completion callback.
|
|
|
|
|
2012-02-27 20:09:33 +01:00
|
|
|
## fs.lchownSync(path, uid, gid)
|
2011-04-02 02:46:18 +02:00
|
|
|
|
2015-03-08 03:52:18 +01:00
|
|
|
Synchronous lchown(2). Returns `undefined`.
|
2011-04-02 02:46:18 +02:00
|
|
|
|
2013-03-14 15:57:13 +01:00
|
|
|
## fs.chmod(path, mode, callback)
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2010-11-21 23:22:34 +01:00
|
|
|
Asynchronous chmod(2). No arguments other than a possible exception are given
|
2010-11-17 17:04:21 +01:00
|
|
|
to the completion callback.
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2012-02-27 20:09:33 +01:00
|
|
|
## fs.chmodSync(path, mode)
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2015-03-08 03:52:18 +01:00
|
|
|
Synchronous chmod(2). Returns `undefined`.
|
2010-11-21 23:22:34 +01:00
|
|
|
|
2013-03-14 15:57:13 +01:00
|
|
|
## fs.fchmod(fd, mode, callback)
|
2011-04-02 02:46:18 +02:00
|
|
|
|
|
|
|
Asynchronous fchmod(2). No arguments other than a possible exception
|
|
|
|
are given to the completion callback.
|
|
|
|
|
2012-02-27 20:09:33 +01:00
|
|
|
## fs.fchmodSync(fd, mode)
|
2011-04-02 02:46:18 +02:00
|
|
|
|
2015-03-08 03:52:18 +01:00
|
|
|
Synchronous fchmod(2). Returns `undefined`.
|
2011-04-02 02:46:18 +02:00
|
|
|
|
2013-03-14 15:57:13 +01:00
|
|
|
## fs.lchmod(path, mode, callback)
|
2011-04-02 02:46:18 +02:00
|
|
|
|
|
|
|
Asynchronous lchmod(2). No arguments other than a possible exception
|
|
|
|
are given to the completion callback.
|
|
|
|
|
2012-06-30 02:23:03 +02:00
|
|
|
Only available on Mac OS X.
|
|
|
|
|
2012-02-27 20:09:33 +01:00
|
|
|
## fs.lchmodSync(path, mode)
|
2011-04-02 02:46:18 +02:00
|
|
|
|
2015-03-08 03:52:18 +01:00
|
|
|
Synchronous lchmod(2). Returns `undefined`.
|
2011-04-02 02:46:18 +02:00
|
|
|
|
2013-03-14 15:57:13 +01:00
|
|
|
## fs.stat(path, callback)
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2010-11-21 23:22:34 +01:00
|
|
|
Asynchronous stat(2). The callback gets two arguments `(err, stats)` where
|
2012-03-16 03:43:00 +01:00
|
|
|
`stats` is a [fs.Stats](#fs_class_fs_stats) object. See the [fs.Stats](#fs_class_fs_stats)
|
2011-10-12 00:30:29 +02:00
|
|
|
section below for more information.
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2013-03-14 15:57:13 +01:00
|
|
|
## fs.lstat(path, callback)
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2010-11-21 23:22:34 +01:00
|
|
|
Asynchronous lstat(2). The callback gets two arguments `(err, stats)` where
|
2011-06-03 13:19:06 +02:00
|
|
|
`stats` is a `fs.Stats` object. `lstat()` is identical to `stat()`, except that if
|
|
|
|
`path` is a symbolic link, then the link itself is stat-ed, not the file that it
|
2010-11-17 17:04:21 +01:00
|
|
|
refers to.
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2013-03-14 15:57:13 +01:00
|
|
|
## fs.fstat(fd, callback)
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2010-11-21 23:22:34 +01:00
|
|
|
Asynchronous fstat(2). The callback gets two arguments `(err, stats)` where
|
2011-06-03 13:19:06 +02:00
|
|
|
`stats` is a `fs.Stats` object. `fstat()` is identical to `stat()`, except that
|
|
|
|
the file to be stat-ed is specified by the file descriptor `fd`.
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2012-02-27 20:09:33 +01:00
|
|
|
## fs.statSync(path)
|
2010-10-28 14:18:16 +02:00
|
|
|
|
|
|
|
Synchronous stat(2). Returns an instance of `fs.Stats`.
|
|
|
|
|
2012-02-27 20:09:33 +01:00
|
|
|
## fs.lstatSync(path)
|
2010-10-28 14:18:16 +02:00
|
|
|
|
|
|
|
Synchronous lstat(2). Returns an instance of `fs.Stats`.
|
|
|
|
|
2012-02-27 20:09:33 +01:00
|
|
|
## fs.fstatSync(fd)
|
2010-10-28 14:18:16 +02:00
|
|
|
|
|
|
|
Synchronous fstat(2). Returns an instance of `fs.Stats`.
|
|
|
|
|
2013-03-14 15:57:13 +01:00
|
|
|
## fs.link(srcpath, dstpath, callback)
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2010-11-21 23:22:34 +01:00
|
|
|
Asynchronous link(2). No arguments other than a possible exception are given to
|
2010-11-17 17:04:21 +01:00
|
|
|
the completion callback.
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2012-02-27 20:09:33 +01:00
|
|
|
## fs.linkSync(srcpath, dstpath)
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2015-03-08 03:52:18 +01:00
|
|
|
Synchronous link(2). Returns `undefined`.
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2014-12-24 00:54:39 +01:00
|
|
|
## fs.symlink(destination, path[, type], callback)
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2010-11-21 23:22:34 +01:00
|
|
|
Asynchronous symlink(2). No arguments other than a possible exception are given
|
2010-11-17 17:04:21 +01:00
|
|
|
to the completion callback.
|
2013-10-26 22:13:56 +02:00
|
|
|
The `type` argument can be set to `'dir'`, `'file'`, or `'junction'` (default
|
|
|
|
is `'file'`) and is only available on Windows (ignored on other platforms).
|
2012-05-23 01:02:10 +02:00
|
|
|
Note that Windows junction points require the destination path to be absolute. When using
|
|
|
|
`'junction'`, the `destination` argument will automatically be normalized to absolute path.
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2014-12-24 00:54:39 +01:00
|
|
|
## fs.symlinkSync(destination, path[, type])
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2015-03-08 03:52:18 +01:00
|
|
|
Synchronous symlink(2). Returns `undefined`.
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2013-03-14 15:57:13 +01:00
|
|
|
## fs.readlink(path, callback)
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2010-11-21 23:22:34 +01:00
|
|
|
Asynchronous readlink(2). The callback gets two arguments `(err,
|
2011-08-31 15:12:34 +02:00
|
|
|
linkString)`.
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2012-02-27 20:09:33 +01:00
|
|
|
## fs.readlinkSync(path)
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2011-08-31 15:12:34 +02:00
|
|
|
Synchronous readlink(2). Returns the symbolic link's string value.
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2014-09-25 00:41:31 +02:00
|
|
|
## fs.realpath(path[, cache], callback)
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2012-04-16 23:52:44 +02:00
|
|
|
Asynchronous realpath(2). The `callback` gets two arguments `(err,
|
|
|
|
resolvedPath)`. May use `process.cwd` to resolve relative paths. `cache` is an
|
|
|
|
object literal of mapped paths that can be used to force a specific path
|
|
|
|
resolution or avoid additional `fs.stat` calls for known real paths.
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2012-04-16 23:52:44 +02:00
|
|
|
Example:
|
|
|
|
|
|
|
|
var cache = {'/etc':'/private/etc'};
|
|
|
|
fs.realpath('/etc/passwd', cache, function (err, resolvedPath) {
|
|
|
|
if (err) throw err;
|
|
|
|
console.log(resolvedPath);
|
|
|
|
});
|
|
|
|
|
2014-09-25 00:41:31 +02:00
|
|
|
## fs.realpathSync(path[, cache])
|
2010-10-28 14:18:16 +02:00
|
|
|
|
|
|
|
Synchronous realpath(2). Returns the resolved path.
|
|
|
|
|
2013-03-14 15:57:13 +01:00
|
|
|
## fs.unlink(path, callback)
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2010-11-21 23:22:34 +01:00
|
|
|
Asynchronous unlink(2). No arguments other than a possible exception are given
|
2010-11-17 17:04:21 +01:00
|
|
|
to the completion callback.
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2012-02-27 20:09:33 +01:00
|
|
|
## fs.unlinkSync(path)
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2015-03-08 03:52:18 +01:00
|
|
|
Synchronous unlink(2). Returns `undefined`.
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2013-03-14 15:57:13 +01:00
|
|
|
## fs.rmdir(path, callback)
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2010-11-21 23:22:34 +01:00
|
|
|
Asynchronous rmdir(2). No arguments other than a possible exception are given
|
2010-11-17 17:04:21 +01:00
|
|
|
to the completion callback.
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2012-02-27 20:09:33 +01:00
|
|
|
## fs.rmdirSync(path)
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2015-03-08 03:52:18 +01:00
|
|
|
Synchronous rmdir(2). Returns `undefined`.
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2014-09-25 00:41:31 +02:00
|
|
|
## fs.mkdir(path[, mode], callback)
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2010-11-21 23:22:34 +01:00
|
|
|
Asynchronous mkdir(2). No arguments other than a possible exception are given
|
2015-01-10 21:12:37 +01:00
|
|
|
to the completion callback. `mode` defaults to `0o777`.
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2014-09-25 00:41:31 +02:00
|
|
|
## fs.mkdirSync(path[, mode])
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2015-03-08 03:52:18 +01:00
|
|
|
Synchronous mkdir(2). Returns `undefined`.
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2013-03-14 15:57:13 +01:00
|
|
|
## fs.readdir(path, callback)
|
2010-10-28 14:18:16 +02:00
|
|
|
|
|
|
|
Asynchronous readdir(3). Reads the contents of a directory.
|
|
|
|
The callback gets two arguments `(err, files)` where `files` is an array of
|
|
|
|
the names of the files in the directory excluding `'.'` and `'..'`.
|
|
|
|
|
2012-02-27 20:09:33 +01:00
|
|
|
## fs.readdirSync(path)
|
2010-10-28 14:18:16 +02:00
|
|
|
|
|
|
|
Synchronous readdir(3). Returns an array of filenames excluding `'.'` and
|
|
|
|
`'..'`.
|
|
|
|
|
2013-03-14 15:57:13 +01:00
|
|
|
## fs.close(fd, callback)
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2010-11-21 23:22:34 +01:00
|
|
|
Asynchronous close(2). No arguments other than a possible exception are given
|
2010-11-17 17:04:21 +01:00
|
|
|
to the completion callback.
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2012-02-27 20:09:33 +01:00
|
|
|
## fs.closeSync(fd)
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2015-03-08 03:52:18 +01:00
|
|
|
Synchronous close(2). Returns `undefined`.
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2014-09-25 00:41:31 +02:00
|
|
|
## fs.open(path, flags[, mode], callback)
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2011-07-09 09:59:35 +02:00
|
|
|
Asynchronous file open. See open(2). `flags` can be:
|
|
|
|
|
|
|
|
* `'r'` - Open file for reading.
|
|
|
|
An exception occurs if the file does not exist.
|
|
|
|
|
2011-10-12 00:30:29 +02:00
|
|
|
* `'r+'` - Open file for reading and writing.
|
2011-07-09 09:59:35 +02:00
|
|
|
An exception occurs if the file does not exist.
|
|
|
|
|
2012-05-17 06:18:25 +02:00
|
|
|
* `'rs'` - Open file for reading in synchronous mode. Instructs the operating
|
|
|
|
system to bypass the local file system cache.
|
|
|
|
|
|
|
|
This is primarily useful for opening files on NFS mounts as it allows you to
|
|
|
|
skip the potentially stale local cache. It has a very real impact on I/O
|
2013-08-02 21:41:24 +02:00
|
|
|
performance so don't use this flag unless you need it.
|
2012-05-17 06:18:25 +02:00
|
|
|
|
|
|
|
Note that this doesn't turn `fs.open()` into a synchronous blocking call.
|
|
|
|
If that's what you want then you should be using `fs.openSync()`
|
2012-05-16 00:10:25 +02:00
|
|
|
|
2012-05-16 05:24:05 +02:00
|
|
|
* `'rs+'` - Open file for reading and writing, telling the OS to open it
|
2012-05-17 06:18:25 +02:00
|
|
|
synchronously. See notes for `'rs'` about using this with caution.
|
2012-05-16 05:24:05 +02:00
|
|
|
|
2011-07-09 09:59:35 +02:00
|
|
|
* `'w'` - Open file for writing.
|
|
|
|
The file is created (if it does not exist) or truncated (if it exists).
|
|
|
|
|
2013-08-02 21:41:24 +02:00
|
|
|
* `'wx'` - Like `'w'` but fails if `path` exists.
|
2012-01-31 01:36:57 +01:00
|
|
|
|
2011-07-09 09:59:35 +02:00
|
|
|
* `'w+'` - Open file for reading and writing.
|
|
|
|
The file is created (if it does not exist) or truncated (if it exists).
|
|
|
|
|
2013-08-02 21:41:24 +02:00
|
|
|
* `'wx+'` - Like `'w+'` but fails if `path` exists.
|
2012-01-31 01:36:57 +01:00
|
|
|
|
2011-07-09 09:59:35 +02:00
|
|
|
* `'a'` - Open file for appending.
|
|
|
|
The file is created if it does not exist.
|
|
|
|
|
2013-08-02 21:41:24 +02:00
|
|
|
* `'ax'` - Like `'a'` but fails if `path` exists.
|
2012-01-31 01:36:57 +01:00
|
|
|
|
2011-07-09 09:59:35 +02:00
|
|
|
* `'a+'` - Open file for reading and appending.
|
|
|
|
The file is created if it does not exist.
|
|
|
|
|
2013-08-02 21:41:24 +02:00
|
|
|
* `'ax+'` - Like `'a+'` but fails if `path` exists.
|
2012-01-31 01:36:57 +01:00
|
|
|
|
2013-08-02 21:41:24 +02:00
|
|
|
`mode` sets the file mode (permission and sticky bits), but only if the file was
|
|
|
|
created. It defaults to `0666`, readable and writeable.
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2013-08-02 21:41:24 +02:00
|
|
|
The callback gets two arguments `(err, fd)`.
|
|
|
|
|
|
|
|
The exclusive flag `'x'` (`O_EXCL` flag in open(2)) ensures that `path` is newly
|
|
|
|
created. On POSIX systems, `path` is considered to exist even if it is a symlink
|
|
|
|
to a non-existent file. The exclusive flag may or may not work with network file
|
|
|
|
systems.
|
2012-01-31 01:36:57 +01:00
|
|
|
|
2013-04-08 00:41:33 +02:00
|
|
|
On Linux, positional writes don't work when the file is opened in append mode.
|
|
|
|
The kernel ignores the position argument and always appends the data to
|
|
|
|
the end of the file.
|
|
|
|
|
2014-09-25 00:41:31 +02:00
|
|
|
## fs.openSync(path, flags[, mode])
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2015-03-08 03:52:18 +01:00
|
|
|
Synchronous version of `fs.open()`. Returns an integer representing the file
|
|
|
|
descriptor.
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2013-03-14 15:57:13 +01:00
|
|
|
## fs.utimes(path, atime, mtime, callback)
|
2010-10-29 12:38:13 +02:00
|
|
|
|
2011-11-01 00:31:37 +01:00
|
|
|
Change file timestamps of the file referenced by the supplied path.
|
2010-10-29 12:38:13 +02:00
|
|
|
|
2015-03-08 03:52:18 +01:00
|
|
|
## fs.utimesSync(path, atime, mtime)
|
|
|
|
|
|
|
|
Synchronous version of `fs.utimes()`. Returns `undefined`.
|
|
|
|
|
|
|
|
|
2013-03-14 15:57:13 +01:00
|
|
|
## fs.futimes(fd, atime, mtime, callback)
|
2010-10-29 12:38:13 +02:00
|
|
|
|
2011-11-01 00:31:37 +01:00
|
|
|
Change the file timestamps of a file referenced by the supplied file
|
|
|
|
descriptor.
|
2010-10-29 12:38:13 +02:00
|
|
|
|
2015-03-08 03:52:18 +01:00
|
|
|
## fs.futimesSync(fd, atime, mtime)
|
|
|
|
|
|
|
|
Synchronous version of `fs.futimes()`. Returns `undefined`.
|
|
|
|
|
2013-03-14 15:57:13 +01:00
|
|
|
## fs.fsync(fd, callback)
|
2011-05-03 23:56:04 +02:00
|
|
|
|
|
|
|
Asynchronous fsync(2). No arguments other than a possible exception are given
|
|
|
|
to the completion callback.
|
|
|
|
|
2012-02-27 20:09:33 +01:00
|
|
|
## fs.fsyncSync(fd)
|
2011-05-03 23:56:04 +02:00
|
|
|
|
2015-03-08 03:52:18 +01:00
|
|
|
Synchronous fsync(2). Returns `undefined`.
|
2010-10-29 12:38:13 +02:00
|
|
|
|
2013-07-02 09:27:26 +02:00
|
|
|
## fs.write(fd, buffer, offset, length[, position], callback)
|
2010-10-28 14:18:16 +02:00
|
|
|
|
|
|
|
Write `buffer` to the file specified by `fd`.
|
|
|
|
|
|
|
|
`offset` and `length` determine the part of the buffer to be written.
|
|
|
|
|
|
|
|
`position` refers to the offset from the beginning of the file where this data
|
2013-07-02 09:27:26 +02:00
|
|
|
should be written. If `typeof position !== 'number'`, the data will be written
|
|
|
|
at the current position. See pwrite(2).
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2013-07-02 09:27:26 +02:00
|
|
|
The callback will be given three arguments `(err, written, buffer)` where
|
|
|
|
`written` specifies how many _bytes_ were written from `buffer`.
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2011-03-19 15:27:25 +01:00
|
|
|
Note that it is unsafe to use `fs.write` multiple times on the same file
|
|
|
|
without waiting for the callback. For this scenario,
|
|
|
|
`fs.createWriteStream` is strongly recommended.
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2013-04-08 00:41:33 +02:00
|
|
|
On Linux, positional writes don't work when the file is opened in append mode.
|
|
|
|
The kernel ignores the position argument and always appends the data to
|
|
|
|
the end of the file.
|
|
|
|
|
2013-07-02 09:27:26 +02:00
|
|
|
## fs.write(fd, data[, position[, encoding]], callback)
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2013-07-02 09:27:26 +02:00
|
|
|
Write `data` to the file specified by `fd`. If `data` is not a Buffer instance
|
|
|
|
then the value will be coerced to a string.
|
|
|
|
|
|
|
|
`position` refers to the offset from the beginning of the file where this data
|
|
|
|
should be written. If `typeof position !== 'number'` the data will be written at
|
|
|
|
the current position. See pwrite(2).
|
|
|
|
|
|
|
|
`encoding` is the expected string encoding.
|
|
|
|
|
|
|
|
The callback will receive the arguments `(err, written, string)` where `written`
|
|
|
|
specifies how many _bytes_ the passed string required to be written. Note that
|
|
|
|
bytes written is not the same as string characters. See
|
|
|
|
[Buffer.byteLength](buffer.html#buffer_class_method_buffer_bytelength_string_encoding).
|
|
|
|
|
|
|
|
Unlike when writing `buffer`, the entire string must be written. No substring
|
|
|
|
may be specified. This is because the byte offset of the resulting data may not
|
|
|
|
be the same as the string offset.
|
|
|
|
|
|
|
|
Note that it is unsafe to use `fs.write` multiple times on the same file
|
|
|
|
without waiting for the callback. For this scenario,
|
|
|
|
`fs.createWriteStream` is strongly recommended.
|
|
|
|
|
|
|
|
On Linux, positional writes don't work when the file is opened in append mode.
|
|
|
|
The kernel ignores the position argument and always appends the data to
|
|
|
|
the end of the file.
|
|
|
|
|
|
|
|
## fs.writeSync(fd, buffer, offset, length[, position])
|
|
|
|
|
|
|
|
## fs.writeSync(fd, data[, position[, encoding]])
|
|
|
|
|
|
|
|
Synchronous versions of `fs.write()`. Returns the number of bytes written.
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2013-03-14 15:57:13 +01:00
|
|
|
## fs.read(fd, buffer, offset, length, position, callback)
|
2010-10-28 14:18:16 +02:00
|
|
|
|
|
|
|
Read data from the file specified by `fd`.
|
|
|
|
|
|
|
|
`buffer` is the buffer that the data will be written to.
|
|
|
|
|
2013-07-28 00:05:10 +02:00
|
|
|
`offset` is the offset in the buffer to start writing at.
|
2010-10-28 14:18:16 +02:00
|
|
|
|
|
|
|
`length` is an integer specifying the number of bytes to read.
|
|
|
|
|
|
|
|
`position` is an integer specifying where to begin reading from in the file.
|
|
|
|
If `position` is `null`, data will be read from the current file position.
|
|
|
|
|
2011-03-29 09:53:32 +02:00
|
|
|
The callback is given the three arguments, `(err, bytesRead, buffer)`.
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2012-02-27 20:09:33 +01:00
|
|
|
## fs.readSync(fd, buffer, offset, length, position)
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2012-06-28 03:47:40 +02:00
|
|
|
Synchronous version of `fs.read`. Returns the number of `bytesRead`.
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2014-09-25 00:41:31 +02:00
|
|
|
## fs.readFile(filename[, options], callback)
|
2013-03-01 18:10:26 +01:00
|
|
|
|
|
|
|
* `filename` {String}
|
2015-05-27 05:11:38 +02:00
|
|
|
* `options` {Object | String}
|
2013-03-01 18:10:26 +01:00
|
|
|
* `encoding` {String | Null} default = `null`
|
|
|
|
* `flag` {String} default = `'r'`
|
2013-03-14 15:57:13 +01:00
|
|
|
* `callback` {Function}
|
2010-10-28 14:18:16 +02:00
|
|
|
|
|
|
|
Asynchronously reads the entire contents of a file. Example:
|
|
|
|
|
|
|
|
fs.readFile('/etc/passwd', function (err, data) {
|
|
|
|
if (err) throw err;
|
|
|
|
console.log(data);
|
|
|
|
});
|
|
|
|
|
|
|
|
The callback is passed two arguments `(err, data)`, where `data` is the
|
|
|
|
contents of the file.
|
|
|
|
|
|
|
|
If no encoding is specified, then the raw buffer is returned.
|
|
|
|
|
2015-05-27 05:11:38 +02:00
|
|
|
If `options` is a string, then it specifies the encoding. Example:
|
|
|
|
|
|
|
|
fs.readFile('/etc/passwd', 'utf8', callback);
|
|
|
|
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2014-09-25 00:41:31 +02:00
|
|
|
## fs.readFileSync(filename[, options])
|
2010-10-28 14:18:16 +02:00
|
|
|
|
|
|
|
Synchronous version of `fs.readFile`. Returns the contents of the `filename`.
|
|
|
|
|
2013-03-01 18:10:26 +01:00
|
|
|
If the `encoding` option is specified then this function returns a
|
|
|
|
string. Otherwise it returns a buffer.
|
|
|
|
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2014-09-25 00:41:31 +02:00
|
|
|
## fs.writeFile(filename, data[, options], callback)
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2013-03-01 18:10:26 +01:00
|
|
|
* `filename` {String}
|
|
|
|
* `data` {String | Buffer}
|
2015-05-27 05:11:38 +02:00
|
|
|
* `options` {Object | String}
|
2013-03-01 18:10:26 +01:00
|
|
|
* `encoding` {String | Null} default = `'utf8'`
|
2015-01-10 21:12:37 +01:00
|
|
|
* `mode` {Number} default = `0o666`
|
2013-03-01 18:10:26 +01:00
|
|
|
* `flag` {String} default = `'w'`
|
2013-03-14 15:57:13 +01:00
|
|
|
* `callback` {Function}
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2011-03-19 15:22:50 +01:00
|
|
|
Asynchronously writes data to a file, replacing the file if it already exists.
|
2013-03-01 18:10:26 +01:00
|
|
|
`data` can be a string or a buffer.
|
|
|
|
|
|
|
|
The `encoding` option is ignored if `data` is a buffer. It defaults
|
|
|
|
to `'utf8'`.
|
2010-10-28 14:18:16 +02:00
|
|
|
|
|
|
|
Example:
|
|
|
|
|
2015-02-07 11:25:13 +01:00
|
|
|
fs.writeFile('message.txt', 'Hello io.js', function (err) {
|
2010-10-28 14:18:16 +02:00
|
|
|
if (err) throw err;
|
|
|
|
console.log('It\'s saved!');
|
|
|
|
});
|
|
|
|
|
2015-05-27 05:11:38 +02:00
|
|
|
If `options` is a string, then it specifies the encoding. Example:
|
|
|
|
|
|
|
|
fs.writeFile('message.txt', 'Hello io.js', 'utf8', callback);
|
|
|
|
|
2014-09-25 00:41:31 +02:00
|
|
|
## fs.writeFileSync(filename, data[, options])
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2015-03-08 03:52:18 +01:00
|
|
|
The synchronous version of `fs.writeFile`. Returns `undefined`.
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2014-09-25 00:41:31 +02:00
|
|
|
## fs.appendFile(filename, data[, options], callback)
|
2013-03-01 18:10:26 +01:00
|
|
|
|
|
|
|
* `filename` {String}
|
|
|
|
* `data` {String | Buffer}
|
2015-05-27 05:11:38 +02:00
|
|
|
* `options` {Object | String}
|
2013-03-01 18:10:26 +01:00
|
|
|
* `encoding` {String | Null} default = `'utf8'`
|
2015-01-10 21:12:37 +01:00
|
|
|
* `mode` {Number} default = `0o666`
|
2013-03-01 18:10:26 +01:00
|
|
|
* `flag` {String} default = `'a'`
|
2013-03-14 15:57:13 +01:00
|
|
|
* `callback` {Function}
|
2011-11-02 19:06:16 +01:00
|
|
|
|
2015-02-11 16:37:23 +01:00
|
|
|
Asynchronously append data to a file, creating the file if it does not yet exist.
|
2013-03-01 18:10:26 +01:00
|
|
|
`data` can be a string or a buffer.
|
2011-11-02 19:06:16 +01:00
|
|
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
fs.appendFile('message.txt', 'data to append', function (err) {
|
|
|
|
if (err) throw err;
|
|
|
|
console.log('The "data to append" was appended to file!');
|
|
|
|
});
|
|
|
|
|
2015-05-27 05:11:38 +02:00
|
|
|
If `options` is a string, then it specifies the encoding. Example:
|
|
|
|
|
|
|
|
fs.appendFile('message.txt', 'data to append', 'utf8', callback);
|
|
|
|
|
2014-09-25 00:41:31 +02:00
|
|
|
## fs.appendFileSync(filename, data[, options])
|
2011-11-02 19:06:16 +01:00
|
|
|
|
2015-03-08 03:52:18 +01:00
|
|
|
The synchronous version of `fs.appendFile`. Returns `undefined`.
|
2011-11-02 19:06:16 +01:00
|
|
|
|
2014-09-25 00:41:31 +02:00
|
|
|
## fs.watchFile(filename[, options], listener)
|
2010-10-28 14:18:16 +02:00
|
|
|
|
|
|
|
Watch for changes on `filename`. The callback `listener` will be called each
|
2011-02-07 22:11:03 +01:00
|
|
|
time the file is accessed.
|
2010-10-28 14:18:16 +02:00
|
|
|
|
|
|
|
The second argument is optional. The `options` if provided should be an object
|
2011-11-17 00:19:46 +01:00
|
|
|
containing two members a boolean, `persistent`, and `interval`. `persistent`
|
|
|
|
indicates whether the process should continue to run as long as files are
|
|
|
|
being watched. `interval` indicates how often the target should be polled,
|
2012-06-21 15:03:49 +02:00
|
|
|
in milliseconds. The default is `{ persistent: true, interval: 5007 }`.
|
2010-10-28 14:18:16 +02:00
|
|
|
|
|
|
|
The `listener` gets two arguments the current stat object and the previous
|
|
|
|
stat object:
|
|
|
|
|
2011-08-12 13:05:46 +02:00
|
|
|
fs.watchFile('message.text', function (curr, prev) {
|
2010-10-28 14:18:16 +02:00
|
|
|
console.log('the current mtime is: ' + curr.mtime);
|
|
|
|
console.log('the previous mtime was: ' + prev.mtime);
|
|
|
|
});
|
|
|
|
|
2010-11-21 23:22:34 +01:00
|
|
|
These stat objects are instances of `fs.Stat`.
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2011-02-07 22:11:03 +01:00
|
|
|
If you want to be notified when the file was modified, not just accessed
|
2011-08-11 06:09:33 +02:00
|
|
|
you need to compare `curr.mtime` and `prev.mtime`.
|
2011-02-07 22:11:03 +01:00
|
|
|
|
2015-05-23 02:01:10 +02:00
|
|
|
_Note: `fs.watch` is more efficient than `fs.watchFile` and `fs.unwatchFile`.
|
|
|
|
`fs.watch` should be used instead of `fs.watchFile` and `fs.unwatchFile`
|
|
|
|
when possible._
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2015-05-23 02:01:10 +02:00
|
|
|
## fs.unwatchFile(filename[, listener])
|
2012-03-04 01:23:31 +01:00
|
|
|
|
2012-07-08 16:31:07 +02:00
|
|
|
Stop watching for changes on `filename`. If `listener` is specified, only that
|
|
|
|
particular listener is removed. Otherwise, *all* listeners are removed and you
|
|
|
|
have effectively stopped watching `filename`.
|
|
|
|
|
|
|
|
Calling `fs.unwatchFile()` with a filename that is not being watched is a
|
|
|
|
no-op, not an error.
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2015-05-23 02:01:10 +02:00
|
|
|
_Note: `fs.watch` is more efficient than `fs.watchFile` and `fs.unwatchFile`.
|
|
|
|
`fs.watch` should be used instead of `fs.watchFile` and `fs.unwatchFile`
|
|
|
|
when possible._
|
2011-10-12 01:01:37 +02:00
|
|
|
|
2015-05-23 02:01:10 +02:00
|
|
|
## fs.watch(filename[, options][, listener])
|
2012-03-04 01:23:31 +01:00
|
|
|
|
2011-10-12 01:01:37 +02:00
|
|
|
Watch for changes on `filename`, where `filename` is either a file or a
|
2012-03-04 01:23:15 +01:00
|
|
|
directory. The returned object is a [fs.FSWatcher](#fs_class_fs_fswatcher).
|
2011-10-12 01:01:37 +02:00
|
|
|
|
2013-10-22 04:08:28 +02:00
|
|
|
The second argument is optional. The `options` if provided should be an object.
|
|
|
|
The supported boolean members are `persistent` and `recursive`. `persistent`
|
|
|
|
indicates whether the process should continue to run as long as files are being
|
|
|
|
watched. `recursive` indicates whether all subdirectories should be watched, or
|
|
|
|
only the current directory. This applies when a directory is specified, and only
|
|
|
|
on supported platforms (See Caveats below).
|
|
|
|
|
|
|
|
The default is `{ persistent: true, recursive: false }`.
|
2011-10-12 01:01:37 +02:00
|
|
|
|
|
|
|
The listener callback gets two arguments `(event, filename)`. `event` is either
|
|
|
|
'rename' or 'change', and `filename` is the name of the file which triggered
|
|
|
|
the event.
|
|
|
|
|
2012-03-04 01:23:31 +01:00
|
|
|
### Caveats
|
|
|
|
|
|
|
|
<!--type=misc-->
|
|
|
|
|
|
|
|
The `fs.watch` API is not 100% consistent across platforms, and is
|
|
|
|
unavailable in some situations.
|
|
|
|
|
2013-10-22 04:08:28 +02:00
|
|
|
The recursive option is currently supported on OS X. Only FSEvents supports this
|
|
|
|
type of file watching so it is unlikely any additional platforms will be added
|
|
|
|
soon.
|
|
|
|
|
2012-03-04 01:23:31 +01:00
|
|
|
#### Availability
|
|
|
|
|
|
|
|
<!--type=misc-->
|
|
|
|
|
|
|
|
This feature depends on the underlying operating system providing a way
|
|
|
|
to be notified of filesystem changes.
|
|
|
|
|
|
|
|
* On Linux systems, this uses `inotify`.
|
2013-10-22 04:08:28 +02:00
|
|
|
* On BSD systems, this uses `kqueue`.
|
|
|
|
* On OS X, this uses `kqueue` for files and 'FSEvents' for directories.
|
2012-03-04 01:23:31 +01:00
|
|
|
* On SunOS systems (including Solaris and SmartOS), this uses `event ports`.
|
|
|
|
* On Windows systems, this feature depends on `ReadDirectoryChangesW`.
|
|
|
|
|
|
|
|
If the underlying functionality is not available for some reason, then
|
2012-09-12 17:04:31 +02:00
|
|
|
`fs.watch` will not be able to function. For example, watching files or
|
|
|
|
directories on network file systems (NFS, SMB, etc.) often doesn't work
|
|
|
|
reliably or at all.
|
|
|
|
|
|
|
|
You can still use `fs.watchFile`, which uses stat polling, but it is slower and
|
|
|
|
less reliable.
|
2012-03-04 01:23:31 +01:00
|
|
|
|
|
|
|
#### Filename Argument
|
|
|
|
|
|
|
|
<!--type=misc-->
|
|
|
|
|
2012-03-05 19:28:47 +01:00
|
|
|
Providing `filename` argument in the callback is not supported
|
2011-10-12 01:01:37 +02:00
|
|
|
on every platform (currently it's only supported on Linux and Windows). Even
|
|
|
|
on supported platforms `filename` is not always guaranteed to be provided.
|
|
|
|
Therefore, don't assume that `filename` argument is always provided in the
|
|
|
|
callback, and have some fallback logic if it is null.
|
|
|
|
|
|
|
|
fs.watch('somedir', function (event, filename) {
|
|
|
|
console.log('event is: ' + event);
|
2012-03-04 01:23:15 +01:00
|
|
|
if (filename) {
|
2011-10-12 01:01:37 +02:00
|
|
|
console.log('filename provided: ' + filename);
|
2012-03-04 01:23:15 +01:00
|
|
|
} else {
|
|
|
|
console.log('filename not provided');
|
|
|
|
}
|
2011-10-12 01:01:37 +02:00
|
|
|
});
|
|
|
|
|
2013-03-14 15:57:13 +01:00
|
|
|
## fs.exists(path, callback)
|
2012-01-21 02:37:57 +01:00
|
|
|
|
2015-02-28 21:30:03 +01:00
|
|
|
`fs.exists()` is **deprecated**. For supported alternatives please check out
|
|
|
|
[`fs.stat`](fs.html#fs_fs_stat_path_callback) or
|
|
|
|
[`fs.access`](fs.html#fs_fs_access_path_mode_callback).
|
|
|
|
|
2012-01-21 02:37:57 +01:00
|
|
|
Test whether or not the given path exists by checking with the file system.
|
|
|
|
Then call the `callback` argument with either true or false. Example:
|
|
|
|
|
|
|
|
fs.exists('/etc/passwd', function (exists) {
|
|
|
|
util.debug(exists ? "it's there" : "no passwd!");
|
|
|
|
});
|
|
|
|
|
2013-10-05 14:45:10 +02:00
|
|
|
`fs.exists()` is an anachronism and exists only for historical reasons.
|
|
|
|
There should almost never be a reason to use it in your own code.
|
|
|
|
|
|
|
|
In particular, checking if a file exists before opening it is an anti-pattern
|
|
|
|
that leaves you vulnerable to race conditions: another process may remove the
|
|
|
|
file between the calls to `fs.exists()` and `fs.open()`. Just open the file
|
|
|
|
and handle the error when it's not there.
|
2012-01-21 02:37:57 +01:00
|
|
|
|
2015-02-28 21:30:03 +01:00
|
|
|
|
2014-12-15 16:44:46 +01:00
|
|
|
|
2012-04-16 07:24:25 +02:00
|
|
|
## fs.existsSync(path)
|
2012-01-21 02:37:57 +01:00
|
|
|
|
2015-02-28 21:30:03 +01:00
|
|
|
Synchronous version of [`fs.exists`](fs.html#fs_fs_exists_path_callback).
|
2015-03-08 03:52:18 +01:00
|
|
|
Returns `true` if the file exists, `false` otherwise.
|
2012-01-21 02:37:57 +01:00
|
|
|
|
2015-02-28 21:30:03 +01:00
|
|
|
`fs.existsSync()` is **deprecated**. For supported alternatives please check
|
|
|
|
out [`fs.statSync`](fs.html#fs_fs_statsync_path) or
|
|
|
|
[`fs.accessSync`](fs.html#fs_fs_accesssync_path_mode).
|
2014-12-15 16:44:46 +01:00
|
|
|
|
|
|
|
## fs.access(path[, mode], callback)
|
|
|
|
|
|
|
|
Tests a user's permissions for the file specified by `path`. `mode` is an
|
|
|
|
optional integer that specifies the accessibility checks to be performed. The
|
|
|
|
following constants define the possible values of `mode`. It is possible to
|
|
|
|
create a mask consisting of the bitwise OR of two or more values.
|
|
|
|
|
|
|
|
- `fs.F_OK` - File is visible to the calling process. This is useful for
|
|
|
|
determining if a file exists, but says nothing about `rwx` permissions.
|
|
|
|
Default if no `mode` is specified.
|
|
|
|
- `fs.R_OK` - File can be read by the calling process.
|
|
|
|
- `fs.W_OK` - File can be written by the calling process.
|
|
|
|
- `fs.X_OK` - File can be executed by the calling process. This has no effect
|
|
|
|
on Windows (will behave like `fs.F_OK`).
|
|
|
|
|
|
|
|
The final argument, `callback`, is a callback function that is invoked with
|
|
|
|
a possible error argument. If any of the accessibility checks fail, the error
|
|
|
|
argument will be populated. The following example checks if the file
|
|
|
|
`/etc/passwd` can be read and written by the current process.
|
|
|
|
|
|
|
|
fs.access('/etc/passwd', fs.R_OK | fs.W_OK, function(err) {
|
|
|
|
util.debug(err ? 'no access!' : 'can read/write');
|
|
|
|
});
|
|
|
|
|
|
|
|
## fs.accessSync(path[, mode])
|
|
|
|
|
|
|
|
Synchronous version of `fs.access`. This throws if any accessibility checks
|
|
|
|
fail, and does nothing otherwise.
|
|
|
|
|
2012-02-27 20:09:33 +01:00
|
|
|
## Class: fs.Stats
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2011-10-12 00:30:29 +02:00
|
|
|
Objects returned from `fs.stat()`, `fs.lstat()` and `fs.fstat()` and their
|
|
|
|
synchronous counterparts are of this type.
|
2010-10-28 14:18:16 +02:00
|
|
|
|
|
|
|
- `stats.isFile()`
|
|
|
|
- `stats.isDirectory()`
|
|
|
|
- `stats.isBlockDevice()`
|
|
|
|
- `stats.isCharacterDevice()`
|
|
|
|
- `stats.isSymbolicLink()` (only valid with `fs.lstat()`)
|
|
|
|
- `stats.isFIFO()`
|
|
|
|
- `stats.isSocket()`
|
|
|
|
|
2011-10-13 03:20:03 +02:00
|
|
|
For a regular file `util.inspect(stats)` would return a string very
|
2011-10-12 00:30:29 +02:00
|
|
|
similar to this:
|
|
|
|
|
|
|
|
{ dev: 2114,
|
|
|
|
ino: 48064969,
|
|
|
|
mode: 33188,
|
|
|
|
nlink: 1,
|
|
|
|
uid: 85,
|
|
|
|
gid: 100,
|
|
|
|
rdev: 0,
|
|
|
|
size: 527,
|
|
|
|
blksize: 4096,
|
|
|
|
blocks: 8,
|
|
|
|
atime: Mon, 10 Oct 2011 23:24:11 GMT,
|
|
|
|
mtime: Mon, 10 Oct 2011 23:24:11 GMT,
|
2013-08-27 19:35:14 +02:00
|
|
|
ctime: Mon, 10 Oct 2011 23:24:11 GMT,
|
|
|
|
birthtime: Mon, 10 Oct 2011 23:24:11 GMT }
|
|
|
|
|
|
|
|
Please note that `atime`, `mtime`, `birthtime`, and `ctime` are
|
|
|
|
instances of [Date][MDN-Date] object and to compare the values of
|
|
|
|
these objects you should use appropriate methods. For most general
|
|
|
|
uses [getTime()][MDN-Date-getTime] will return the number of
|
|
|
|
milliseconds elapsed since _1 January 1970 00:00:00 UTC_ and this
|
2013-12-26 04:08:10 +01:00
|
|
|
integer should be sufficient for any comparison, however there are
|
2013-08-27 19:35:14 +02:00
|
|
|
additional methods which can be used for displaying fuzzy information.
|
|
|
|
More details can be found in the [MDN JavaScript Reference][MDN-Date]
|
|
|
|
page.
|
2011-10-12 00:30:29 +02:00
|
|
|
|
|
|
|
[MDN-Date]: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date
|
|
|
|
[MDN-Date-getTime]: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/getTime
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2013-08-27 19:35:14 +02:00
|
|
|
### Stat Time Values
|
|
|
|
|
|
|
|
The times in the stat object have the following semantics:
|
|
|
|
|
|
|
|
* `atime` "Access Time" - Time when file data last accessed. Changed
|
|
|
|
by the `mknod(2)`, `utimes(2)`, and `read(2)` system calls.
|
|
|
|
* `mtime` "Modified Time" - Time when file data last modified.
|
|
|
|
Changed by the `mknod(2)`, `utimes(2)`, and `write(2)` system calls.
|
|
|
|
* `ctime` "Change Time" - Time when file status was last changed
|
|
|
|
(inode data modification). Changed by the `chmod(2)`, `chown(2)`,
|
|
|
|
`link(2)`, `mknod(2)`, `rename(2)`, `unlink(2)`, `utimes(2)`,
|
|
|
|
`read(2)`, and `write(2)` system calls.
|
|
|
|
* `birthtime` "Birth Time" - Time of file creation. Set once when the
|
|
|
|
file is created. On filesystems where birthtime is not available,
|
|
|
|
this field may instead hold either the `ctime` or
|
|
|
|
`1970-01-01T00:00Z` (ie, unix epoch timestamp `0`). On Darwin and
|
|
|
|
other FreeBSD variants, also set if the `atime` is explicitly set to
|
|
|
|
an earlier value than the current `birthtime` using the `utimes(2)`
|
|
|
|
system call.
|
|
|
|
|
2015-02-07 11:25:13 +01:00
|
|
|
Prior to io.js v1.0 and Node v0.12, the `ctime` held the `birthtime` on Windows
|
2013-08-27 19:35:14 +02:00
|
|
|
systems. Note that as of v0.12, `ctime` is not "creation time", and
|
|
|
|
on Unix systems, it never was.
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2014-09-25 00:41:31 +02:00
|
|
|
## fs.createReadStream(path[, options])
|
2010-10-28 14:18:16 +02:00
|
|
|
|
|
|
|
Returns a new ReadStream object (See `Readable Stream`).
|
|
|
|
|
|
|
|
`options` is an object with the following defaults:
|
|
|
|
|
2010-11-18 03:25:14 +01:00
|
|
|
{ flags: 'r',
|
|
|
|
encoding: null,
|
2011-02-20 13:41:14 +01:00
|
|
|
fd: null,
|
2015-01-10 21:12:37 +01:00
|
|
|
mode: 0o666,
|
2012-12-17 16:03:19 +01:00
|
|
|
autoClose: true
|
2011-02-20 13:45:25 +01:00
|
|
|
}
|
2010-10-28 14:18:16 +02:00
|
|
|
|
|
|
|
`options` can include `start` and `end` values to read a range of bytes from
|
|
|
|
the file instead of the entire file. Both `start` and `end` are inclusive and
|
2012-03-24 22:32:32 +01:00
|
|
|
start at 0. The `encoding` can be `'utf8'`, `'ascii'`, or `'base64'`.
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2014-07-26 16:04:46 +02:00
|
|
|
If `fd` is specified, `ReadStream` will ignore the `path` argument and will use
|
|
|
|
the specified file descriptor. This means that no `open` event will be emitted.
|
|
|
|
|
2012-12-17 16:03:19 +01:00
|
|
|
If `autoClose` is false, then the file descriptor won't be closed, even if
|
2013-03-29 00:16:12 +01:00
|
|
|
there's an error. It is your responsibility to close it and make sure
|
2012-12-17 16:03:19 +01:00
|
|
|
there's no file descriptor leak. If `autoClose` is set to true (default
|
|
|
|
behavior), on `error` or `end` the file descriptor will be closed
|
|
|
|
automatically.
|
|
|
|
|
2010-10-28 14:18:16 +02:00
|
|
|
An example to read the last 10 bytes of a file which is 100 bytes long:
|
|
|
|
|
|
|
|
fs.createReadStream('sample.txt', {start: 90, end: 99});
|
|
|
|
|
|
|
|
|
2012-02-27 20:09:33 +01:00
|
|
|
## Class: fs.ReadStream
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2013-04-07 10:19:50 +02:00
|
|
|
`ReadStream` is a [Readable Stream](stream.html#stream_class_stream_readable).
|
2010-10-28 14:18:16 +02:00
|
|
|
|
|
|
|
### Event: 'open'
|
|
|
|
|
2012-03-04 01:23:15 +01:00
|
|
|
* `fd` {Integer} file descriptor used by the ReadStream.
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2012-03-04 01:23:15 +01:00
|
|
|
Emitted when the ReadStream's file is opened.
|
2011-04-14 22:45:32 +02:00
|
|
|
|
|
|
|
|
2014-09-25 00:41:31 +02:00
|
|
|
## fs.createWriteStream(path[, options])
|
2010-10-28 14:18:16 +02:00
|
|
|
|
|
|
|
Returns a new WriteStream object (See `Writable Stream`).
|
|
|
|
|
|
|
|
`options` is an object with the following defaults:
|
|
|
|
|
2010-11-18 03:25:14 +01:00
|
|
|
{ flags: 'w',
|
|
|
|
encoding: null,
|
2014-07-26 16:04:46 +02:00
|
|
|
fd: null,
|
2015-01-10 21:12:37 +01:00
|
|
|
mode: 0o666 }
|
2011-09-11 22:30:01 +02:00
|
|
|
|
|
|
|
`options` may also include a `start` option to allow writing data at
|
|
|
|
some position past the beginning of the file. Modifying a file rather
|
|
|
|
than replacing it may require a `flags` mode of `r+` rather than the
|
2015-05-30 19:12:07 +02:00
|
|
|
default mode `w`. The `encoding` can be `'utf8'`, `'ascii'`, `binary`,
|
|
|
|
or `'base64'`.
|
2011-10-12 01:01:37 +02:00
|
|
|
|
2014-07-26 16:04:46 +02:00
|
|
|
Like `ReadStream` above, if `fd` is specified, `WriteStream` will ignore the
|
|
|
|
`path` argument and will use the specified file descriptor. This means that no
|
|
|
|
`open` event will be emitted.
|
|
|
|
|
|
|
|
|
2013-04-07 10:40:55 +02:00
|
|
|
## Class: fs.WriteStream
|
2012-02-27 20:09:33 +01:00
|
|
|
|
2013-04-07 10:19:50 +02:00
|
|
|
`WriteStream` is a [Writable Stream](stream.html#stream_class_stream_writable).
|
2012-02-27 20:09:33 +01:00
|
|
|
|
|
|
|
### Event: 'open'
|
|
|
|
|
2012-03-04 08:38:52 +01:00
|
|
|
* `fd` {Integer} file descriptor used by the WriteStream.
|
2012-02-27 20:09:33 +01:00
|
|
|
|
2012-03-04 01:23:15 +01:00
|
|
|
Emitted when the WriteStream's file is opened.
|
2012-02-27 20:09:33 +01:00
|
|
|
|
|
|
|
### file.bytesWritten
|
|
|
|
|
|
|
|
The number of bytes written so far. Does not include data that is still queued
|
|
|
|
for writing.
|
|
|
|
|
|
|
|
## Class: fs.FSWatcher
|
2011-10-12 01:01:37 +02:00
|
|
|
|
|
|
|
Objects returned from `fs.watch()` are of this type.
|
|
|
|
|
2012-02-27 20:09:33 +01:00
|
|
|
### watcher.close()
|
2011-10-12 01:01:37 +02:00
|
|
|
|
|
|
|
Stop watching for changes on the given `fs.FSWatcher`.
|
|
|
|
|
2012-02-27 20:09:33 +01:00
|
|
|
### Event: 'change'
|
2011-10-12 01:01:37 +02:00
|
|
|
|
2012-02-27 20:09:33 +01:00
|
|
|
* `event` {String} The type of fs change
|
|
|
|
* `filename` {String} The filename that changed (if relevant/available)
|
2011-10-12 01:01:37 +02:00
|
|
|
|
|
|
|
Emitted when something changes in a watched directory or file.
|
2012-03-16 03:43:00 +01:00
|
|
|
See more details in [fs.watch](#fs_fs_watch_filename_options_listener).
|
2011-10-12 01:01:37 +02:00
|
|
|
|
2012-02-27 20:09:33 +01:00
|
|
|
### Event: 'error'
|
2011-10-12 01:01:37 +02:00
|
|
|
|
2012-03-04 01:23:15 +01:00
|
|
|
* `error` {Error object}
|
2011-10-12 01:01:37 +02:00
|
|
|
|
|
|
|
Emitted when an error occurs.
|