2010-10-28 14:18:16 +02:00
|
|
|
## File System
|
|
|
|
|
|
|
|
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');
|
|
|
|
|
|
|
|
fs.unlinkSync('/tmp/hello')
|
|
|
|
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.
|
|
|
|
|
2011-07-14 13:17:40 +02:00
|
|
|
Relative path to filename can be used, remember however that this path will be relative
|
|
|
|
to `process.cwd()`.
|
|
|
|
|
2010-10-28 14:18:16 +02:00
|
|
|
### fs.rename(path1, path2, [callback])
|
|
|
|
|
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
|
|
|
|
|
|
|
### fs.renameSync(path1, path2)
|
|
|
|
|
|
|
|
Synchronous rename(2).
|
|
|
|
|
|
|
|
### fs.truncate(fd, len, [callback])
|
|
|
|
|
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
|
|
|
|
|
|
|
### fs.truncateSync(fd, len)
|
|
|
|
|
|
|
|
Synchronous ftruncate(2).
|
|
|
|
|
2011-08-15 15:09:03 +02: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.
|
|
|
|
|
2011-08-15 15:09:03 +02:00
|
|
|
### fs.chownSync(path, uid, gid)
|
2011-04-02 02:46:18 +02:00
|
|
|
|
|
|
|
Synchronous chown(2).
|
|
|
|
|
2011-08-15 15:09:03 +02:00
|
|
|
### fs.fchown(path, 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.
|
|
|
|
|
2011-08-15 15:09:03 +02:00
|
|
|
### fs.fchownSync(path, uid, gid)
|
2011-04-02 02:46:18 +02:00
|
|
|
|
|
|
|
Synchronous fchown(2).
|
|
|
|
|
2011-08-15 15:09:03 +02: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.
|
|
|
|
|
2011-08-15 15:09:03 +02:00
|
|
|
### fs.lchownSync(path, uid, gid)
|
2011-04-02 02:46:18 +02:00
|
|
|
|
|
|
|
Synchronous lchown(2).
|
|
|
|
|
2010-10-28 14:18:16 +02:00
|
|
|
### fs.chmod(path, mode, [callback])
|
|
|
|
|
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
|
|
|
|
|
|
|
### fs.chmodSync(path, mode)
|
|
|
|
|
|
|
|
Synchronous chmod(2).
|
2010-11-21 23:22:34 +01:00
|
|
|
|
2011-04-02 02:46:18 +02:00
|
|
|
### fs.fchmod(fd, mode, [callback])
|
|
|
|
|
|
|
|
Asynchronous fchmod(2). No arguments other than a possible exception
|
|
|
|
are given to the completion callback.
|
|
|
|
|
|
|
|
### fs.fchmodSync(path, mode)
|
|
|
|
|
|
|
|
Synchronous fchmod(2).
|
|
|
|
|
|
|
|
### fs.lchmod(fd, mode, [callback])
|
|
|
|
|
|
|
|
Asynchronous lchmod(2). No arguments other than a possible exception
|
|
|
|
are given to the completion callback.
|
|
|
|
|
|
|
|
### fs.lchmodSync(path, mode)
|
|
|
|
|
|
|
|
Synchronous lchmod(2).
|
|
|
|
|
2010-10-28 14:18:16 +02:00
|
|
|
### fs.stat(path, [callback])
|
|
|
|
|
2010-11-21 23:22:34 +01:00
|
|
|
Asynchronous stat(2). The callback gets two arguments `(err, stats)` where
|
2011-10-22 16:40:15 +02:00
|
|
|
`stats` is a [fs.Stats](#fs.Stats) object. See the [fs.Stats](#fs.Stats)
|
2011-10-12 00:30:29 +02:00
|
|
|
section below for more information.
|
2010-10-28 14:18:16 +02:00
|
|
|
|
|
|
|
### fs.lstat(path, [callback])
|
|
|
|
|
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
|
|
|
|
|
|
|
### fs.fstat(fd, [callback])
|
|
|
|
|
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
|
|
|
|
|
|
|
### fs.statSync(path)
|
|
|
|
|
|
|
|
Synchronous stat(2). Returns an instance of `fs.Stats`.
|
|
|
|
|
|
|
|
### fs.lstatSync(path)
|
|
|
|
|
|
|
|
Synchronous lstat(2). Returns an instance of `fs.Stats`.
|
|
|
|
|
|
|
|
### fs.fstatSync(fd)
|
|
|
|
|
|
|
|
Synchronous fstat(2). Returns an instance of `fs.Stats`.
|
|
|
|
|
|
|
|
### fs.link(srcpath, dstpath, [callback])
|
|
|
|
|
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
|
|
|
|
2011-01-27 23:20:50 +01:00
|
|
|
### fs.linkSync(srcpath, dstpath)
|
2010-10-28 14:18:16 +02:00
|
|
|
|
|
|
|
Synchronous link(2).
|
|
|
|
|
|
|
|
### fs.symlink(linkdata, path, [callback])
|
|
|
|
|
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.
|
2010-10-28 14:18:16 +02:00
|
|
|
|
|
|
|
### fs.symlinkSync(linkdata, path)
|
|
|
|
|
|
|
|
Synchronous symlink(2).
|
|
|
|
|
|
|
|
### fs.readlink(path, [callback])
|
|
|
|
|
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
|
|
|
|
|
|
|
### fs.readlinkSync(path)
|
|
|
|
|
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
|
|
|
|
|
|
|
### fs.realpath(path, [callback])
|
|
|
|
|
2010-11-21 23:22:34 +01:00
|
|
|
Asynchronous realpath(2). The callback gets two arguments `(err,
|
2011-08-31 15:12:34 +02:00
|
|
|
resolvedPath)`. May use `process.cwd` to resolve relative paths.
|
2010-10-28 14:18:16 +02:00
|
|
|
|
|
|
|
### fs.realpathSync(path)
|
|
|
|
|
|
|
|
Synchronous realpath(2). Returns the resolved path.
|
|
|
|
|
|
|
|
### fs.unlink(path, [callback])
|
|
|
|
|
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
|
|
|
|
|
|
|
### fs.unlinkSync(path)
|
|
|
|
|
|
|
|
Synchronous unlink(2).
|
|
|
|
|
|
|
|
### fs.rmdir(path, [callback])
|
|
|
|
|
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
|
|
|
|
|
|
|
### fs.rmdirSync(path)
|
|
|
|
|
|
|
|
Synchronous rmdir(2).
|
|
|
|
|
|
|
|
### fs.mkdir(path, mode, [callback])
|
|
|
|
|
2010-11-21 23:22:34 +01:00
|
|
|
Asynchronous mkdir(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
|
|
|
|
|
|
|
### fs.mkdirSync(path, mode)
|
|
|
|
|
|
|
|
Synchronous mkdir(2).
|
|
|
|
|
|
|
|
### fs.readdir(path, [callback])
|
|
|
|
|
|
|
|
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 `'..'`.
|
|
|
|
|
|
|
|
### fs.readdirSync(path)
|
|
|
|
|
|
|
|
Synchronous readdir(3). Returns an array of filenames excluding `'.'` and
|
|
|
|
`'..'`.
|
|
|
|
|
|
|
|
### fs.close(fd, [callback])
|
|
|
|
|
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
|
|
|
|
|
|
|
### fs.closeSync(fd)
|
|
|
|
|
|
|
|
Synchronous close(2).
|
|
|
|
|
2011-02-15 14:41:17 +01: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.
|
|
|
|
|
|
|
|
* `'w'` - Open file for writing.
|
|
|
|
The file is created (if it does not exist) or truncated (if it exists).
|
|
|
|
|
|
|
|
* `'w+'` - Open file for reading and writing.
|
|
|
|
The file is created (if it does not exist) or truncated (if it exists).
|
|
|
|
|
|
|
|
* `'a'` - Open file for appending.
|
|
|
|
The file is created if it does not exist.
|
|
|
|
|
|
|
|
* `'a+'` - Open file for reading and appending.
|
|
|
|
The file is created if it does not exist.
|
|
|
|
|
|
|
|
`mode` defaults to `0666`. The callback gets two arguments `(err, fd)`.
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2011-02-15 14:41:17 +01:00
|
|
|
### fs.openSync(path, flags, [mode])
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2010-11-21 23:22:34 +01:00
|
|
|
Synchronous open(2).
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2010-10-29 12:38:13 +02:00
|
|
|
### fs.utimes(path, atime, mtime, callback)
|
|
|
|
### fs.utimesSync(path, atime, mtime)
|
|
|
|
|
|
|
|
Change file timestamps.
|
|
|
|
|
|
|
|
### fs.futimes(path, atime, mtime, callback)
|
|
|
|
### fs.futimesSync(path, atime, mtime)
|
|
|
|
|
|
|
|
Change file timestamps with the difference that if filename refers to a
|
|
|
|
symbolic link, then the link is not dereferenced.
|
|
|
|
|
2011-05-03 23:56:04 +02:00
|
|
|
### fs.fsync(fd, callback)
|
|
|
|
|
|
|
|
Asynchronous fsync(2). No arguments other than a possible exception are given
|
|
|
|
to the completion callback.
|
|
|
|
|
|
|
|
### fs.fsyncSync(fd)
|
|
|
|
|
|
|
|
Synchronous fsync(2).
|
2010-10-29 12:38:13 +02:00
|
|
|
|
2010-10-28 14:18:16 +02:00
|
|
|
### fs.write(fd, buffer, offset, length, position, [callback])
|
|
|
|
|
|
|
|
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
|
|
|
|
should be written. If `position` is `null`, the data will be written at the
|
|
|
|
current position.
|
|
|
|
See pwrite(2).
|
|
|
|
|
2011-03-29 09:53:32 +02:00
|
|
|
The callback will be given three arguments `(err, written, buffer)` where `written`
|
2011-08-31 15:12:34 +02:00
|
|
|
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
|
|
|
|
|
|
|
### fs.writeSync(fd, buffer, offset, length, position)
|
|
|
|
|
2010-11-21 23:22:34 +01:00
|
|
|
Synchronous version of buffer-based `fs.write()`. Returns the number of bytes
|
2010-11-17 17:04:21 +01:00
|
|
|
written.
|
2010-10-28 14:18:16 +02:00
|
|
|
|
|
|
|
### fs.writeSync(fd, str, position, encoding='utf8')
|
|
|
|
|
2011-08-31 15:12:34 +02:00
|
|
|
Synchronous version of string-based `fs.write()`. Returns the number of _bytes_
|
2010-11-17 17:04:21 +01:00
|
|
|
written.
|
2010-10-28 14:18:16 +02:00
|
|
|
|
|
|
|
### fs.read(fd, buffer, offset, length, position, [callback])
|
|
|
|
|
|
|
|
Read data from the file specified by `fd`.
|
|
|
|
|
|
|
|
`buffer` is the buffer that the data will be written to.
|
|
|
|
|
|
|
|
`offset` is offset within the buffer where writing will start.
|
|
|
|
|
|
|
|
`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
|
|
|
|
|
|
|
### fs.readSync(fd, buffer, offset, length, position)
|
|
|
|
|
2010-11-21 23:22:34 +01:00
|
|
|
Synchronous version of buffer-based `fs.read`. Returns the number of
|
2010-11-17 17:04:21 +01:00
|
|
|
`bytesRead`.
|
2010-10-28 14:18:16 +02:00
|
|
|
|
|
|
|
### fs.readSync(fd, length, position, encoding)
|
|
|
|
|
2010-11-21 23:22:34 +01:00
|
|
|
Synchronous version of string-based `fs.read`. Returns the number of
|
2010-11-17 17:04:21 +01:00
|
|
|
`bytesRead`.
|
2010-10-28 14:18:16 +02:00
|
|
|
|
|
|
|
### fs.readFile(filename, [encoding], [callback])
|
|
|
|
|
|
|
|
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.
|
|
|
|
|
|
|
|
|
|
|
|
### fs.readFileSync(filename, [encoding])
|
|
|
|
|
|
|
|
Synchronous version of `fs.readFile`. Returns the contents of the `filename`.
|
|
|
|
|
|
|
|
If `encoding` is specified then this function returns a string. Otherwise it
|
|
|
|
returns a buffer.
|
|
|
|
|
|
|
|
|
|
|
|
### fs.writeFile(filename, data, encoding='utf8', [callback])
|
|
|
|
|
2011-03-19 15:22:50 +01:00
|
|
|
Asynchronously writes data to a file, replacing the file if it already exists.
|
2011-07-04 16:26:46 +02:00
|
|
|
`data` can be a string or a buffer. The `encoding` argument is ignored if
|
|
|
|
`data` is a buffer.
|
2010-10-28 14:18:16 +02:00
|
|
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
fs.writeFile('message.txt', 'Hello Node', function (err) {
|
|
|
|
if (err) throw err;
|
|
|
|
console.log('It\'s saved!');
|
|
|
|
});
|
|
|
|
|
|
|
|
### fs.writeFileSync(filename, data, encoding='utf8')
|
|
|
|
|
|
|
|
The synchronous version of `fs.writeFile`.
|
|
|
|
|
|
|
|
### fs.watchFile(filename, [options], listener)
|
|
|
|
|
|
|
|
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
|
|
|
|
containing two members a boolean, `persistent`, and `interval`, a polling
|
2011-02-07 22:11:03 +01:00
|
|
|
value in milliseconds. The default is `{ persistent: true, interval: 0 }`.
|
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
|
|
|
|
|
|
|
|
2010-10-28 14:18:16 +02:00
|
|
|
### fs.unwatchFile(filename)
|
|
|
|
|
|
|
|
Stop watching for changes on `filename`.
|
|
|
|
|
2011-10-12 01:01:37 +02:00
|
|
|
### fs.watch(filename, [options], listener)
|
|
|
|
|
|
|
|
Watch for changes on `filename`, where `filename` is either a file or a
|
|
|
|
directory. The returned object is [fs.FSWatcher](#fs.FSWatcher).
|
|
|
|
|
|
|
|
The second argument is optional. The `options` if provided should be an object
|
|
|
|
containing a boolean member `persistent`. The default is `{ persistent: true }`.
|
|
|
|
|
|
|
|
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.
|
|
|
|
|
|
|
|
***Warning:***
|
|
|
|
Providing `filename` argument in the callback is not supported
|
|
|
|
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);
|
|
|
|
if (filename) {
|
|
|
|
console.log('filename provided: ' + filename);
|
|
|
|
} else {
|
|
|
|
console.log('filename not provided');
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2010-10-28 14:18:16 +02:00
|
|
|
## fs.Stats
|
|
|
|
|
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,
|
|
|
|
ctime: Mon, 10 Oct 2011 23:24:11 GMT }
|
|
|
|
|
|
|
|
Please note that `atime`, `mtime` and `ctime` are instances
|
2011-10-22 16:40:15 +02:00
|
|
|
of [Date][MDN-Date] object and to compare the values of
|
2011-10-12 00:30:29 +02:00
|
|
|
these objects you should use appropriate methods. For most
|
2011-10-22 16:40:15 +02:00
|
|
|
general uses [getTime()][MDN-Date-getTime] will return
|
2011-10-12 00:30:29 +02:00
|
|
|
the number of milliseconds elapsed since _1 January 1970
|
|
|
|
00:00:00 UTC_ and this integer should be sufficient for
|
|
|
|
any comparison, however there additional methods which can
|
|
|
|
be used for displaying fuzzy information. More details can
|
|
|
|
be found in the [MDN JavaScript Reference][MDN-Date] page.
|
|
|
|
|
|
|
|
[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
|
|
|
|
|
|
|
## fs.ReadStream
|
|
|
|
|
2011-09-20 08:50:36 +02:00
|
|
|
`ReadStream` is a [Readable Stream](streams.html#readable_Stream).
|
2010-10-28 14:18:16 +02:00
|
|
|
|
2011-06-11 15:09:40 +02:00
|
|
|
### Event: 'open'
|
|
|
|
|
|
|
|
`function (fd) { }`
|
|
|
|
|
|
|
|
`fd` is the file descriptor used by the ReadStream.
|
|
|
|
|
2010-10-28 14:18:16 +02:00
|
|
|
### fs.createReadStream(path, [options])
|
|
|
|
|
|
|
|
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,
|
2010-11-18 03:25:14 +01:00
|
|
|
mode: 0666,
|
2011-02-20 13:45:25 +01:00
|
|
|
bufferSize: 64 * 1024
|
|
|
|
}
|
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
|
2011-04-05 23:37:40 +02:00
|
|
|
start at 0.
|
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});
|
|
|
|
|
|
|
|
|
|
|
|
## fs.WriteStream
|
|
|
|
|
2011-09-20 08:50:36 +02:00
|
|
|
`WriteStream` is a [Writable Stream](streams.html#writable_Stream).
|
2010-10-28 14:18:16 +02:00
|
|
|
|
|
|
|
### Event: 'open'
|
|
|
|
|
|
|
|
`function (fd) { }`
|
|
|
|
|
|
|
|
`fd` is the file descriptor used by the WriteStream.
|
|
|
|
|
2011-04-14 22:45:32 +02:00
|
|
|
### file.bytesWritten
|
|
|
|
|
|
|
|
The number of bytes written so far. Does not include data that is still queued
|
|
|
|
for writing.
|
|
|
|
|
2010-10-28 14:18:16 +02:00
|
|
|
### fs.createWriteStream(path, [options])
|
|
|
|
|
|
|
|
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,
|
|
|
|
mode: 0666 }
|
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
|
|
|
|
default mode `w`.
|
2011-10-12 01:01:37 +02:00
|
|
|
|
|
|
|
## fs.FSWatcher
|
|
|
|
|
|
|
|
Objects returned from `fs.watch()` are of this type.
|
|
|
|
|
|
|
|
#### watcher.close()
|
|
|
|
|
|
|
|
Stop watching for changes on the given `fs.FSWatcher`.
|
|
|
|
|
|
|
|
#### Event: 'change'
|
|
|
|
|
|
|
|
`function (event, filename) {}`
|
|
|
|
|
|
|
|
Emitted when something changes in a watched directory or file.
|
|
|
|
See more details in [fs.watch](#fs.watch).
|
|
|
|
|
|
|
|
#### Event: 'error'
|
|
|
|
|
|
|
|
`function (exception) {}`
|
|
|
|
|
|
|
|
Emitted when an error occurs.
|