|
文件系统模块是一个封装了标准的 POSIX 文件 I/O 操作的集合。通过 require('fs') 使用这个模块。所有的方法都有同步和异步两种模式。
异步方法最后一个参数都是回调函数,这个回调的参数取决于方法,不过第一个参数一般都是异常。如果操作成功,那么第一个参数就是 null 或 undefined。
当使用一个同步操作的时候,任意的异常都立即抛出,可以用 try/catch 来处理异常,使得程序正常运行。
这是异步操作的例子:
- var fs = require('fs');
- fs.unlink('/tmp/hello', function (err) {
- if (err) throw err;
- console.log('successfully deleted /tmp/hello');
- });
复制代码 这是同步操作的例子:
- var fs = require('fs');
- fs.unlinkSync('/tmp/hello');
- console.log('successfully deleted /tmp/hello');
复制代码 异步方法不能保证操作顺序,因此下面的例子很容易出错:
- 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));
- });
复制代码 可能先执行了 fs.stat 方法。正确的方法:
- 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));
- });
- });
复制代码 在繁忙的进程里,强烈建议使用异步方法。同步方法会阻塞整个进程,直到方法完成。
可能会用到相对路径,路径是相对 process.cwd() 来说的。
大部分 fs 函数会忽略回调参数,如果忽略,将会用默认函数抛出异常。如果想得到原调用点的堆栈信息,需要设置环境变量 NODE_DEBUG;
- $ cat script.js
- function bad() {
- require('fs').readFile('/');
- }
- bad();
- $ env NODE_DEBUG=fs node script.js
- 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.>
复制代码 fs.rename(oldPath, newPath, callback)
异步函数 rename(2)。回调函数只有一个参数:可能出现的异常。
fs.renameSync(oldPath, newPath)
同步函数 rename(2)。 返回 undefined。
fs.ftruncate(fd, len, callback)
异步函数 ftruncate(2)。 回调函数只有一个参数:可能出现的异常。
fs.ftruncateSync(fd, len)
同步函数 ftruncate(2)。 返回 undefined。
fs.truncate(path, len, callback)
异步函数 truncate(2)。 回调函数只有一个参数:可能出现的异常。 文件描述符也可以作为第一个参数,如果这种情况,调用 fs.ftruncate() 。
fs.truncateSync(path, len)
同步函数 truncate(2)。 返回 undefined。
fs.chown(path, uid, gid, callback)
异步函数 chown(2)。 回调函数只有一个参数:可能出现的异常。
fs.chownSync(path, uid, gid)
同步函数 chown(2)。 返回 undefined。
fs.fchown(fd, uid, gid, callback)
异步函数 fchown(2)。 回调函数只有一个参数:可能出现的异常。
fs.fchownSync(fd, uid, gid)
同步函数 fchown(2)。 返回 undefined。
fs.lchown(path, uid, gid, callback)
异步函数 lchown(2)。 回调函数只有一个参数:可能出现的异常。
fs.lchownSync(path, uid, gid)
同步函数 lchown(2)。 返回 undefined。
fs.chmod(path, mode, callback)
异步函数 chmod(2)。回调函数只有一个参数:可能出现的异常。
fs.chmodSync(path, mode)
同步函数 chmod(2)。 返回 undefined。
fs.fchmod(fd, mode, callback)
异步函数 fchmod(2)。 回调函数只有一个参数:可能出现的异常。
fs.fchmodSync(fd, mode)
同步函数 fchmod(2)。 返回 undefined。
fs.lchmod(path, mode, callback)
异步函数 lchmod(2)。 回调函数只有一个参数:可能出现的异常。
仅在 Mac OS X 可用。
fs.lchmodSync(path, mode)
同步函数 lchmod(2)。 返回 undefined。
fs.stat(path, callback)
异步函数 stat(2)。 回调函数有两个参数: (err, stats) ,其中 stats 是一个 fs.Stats 对象。 详情请参考 fs.Stats。
fs.lstat(path, callback)
异步函数 lstat(2)。 回调函数有两个参数: (err, stats) ,其中 stats 是一个 fs.Stats 对象。 lstat() 与 stat() 基本相同, 区别在于,如果 path 是链接,读取的是链接本身,而不是它所链接到的文件。
fs.fstat(fd, callback)
异步函数 fstat(2)。 回调函数有两个参数: (err, stats) ,其中 stats 是一个 fs.Stats 对象。
fs.statSync(path)
同步函数 stat(2)。 返回 fs.Stats 实例。
fs.lstatSync(path)
同步函数 lstat(2)。 返回 fs.Stats 实例。
fs.fstatSync(fd)
同步函数 fstat(2)。 返回 fs.Stats 实例。
fs.link(srcpath, dstpath, callback)
异步函数 link(2)。 回调函数只有一个参数:可能出现的异常。
fs.linkSync(srcpath, dstpath)
同步函数 link(2)。 返回 undefined。
fs.symlink(srcpath, dstpath[, type], callback)
异步函数 symlink(2)。 回调函数只有一个参数:可能出现的异常。
type 可能是 'dir', 'file', 或 'junction' (默认 'file') ,仅在 Windows(不考虑其他系统)有效。注意, Windows junction 要求目的地址需要绝对的。当使用 'junction' 的时候,destination 参数将会自动转换为绝对路径。
fs.symlinkSync(srcpath, dstpath[, type])
同步函数 symlink(2)。 返回 undefined。
fs.readlink(path, callback)
异步函数 readlink(2)。 回调函数有2个参数 (err, linkString).
fs.readlinkSync(path)
同步函数 readlink(2)。 返回符号链接的字符串值。
fs.realpath(path[, cache], callback)
异步函数 realpath(2)。 回调函数有2个参数 (err,resolvedPath)。可以使用 process.cwd来解决相对路径问题。
例如:
var cache = {'/etc':'/private/etc'};
fs.realpath('/etc/passwd', cache, function (err, resolvedPath) {
if (err) throw err;
console.log(resolvedPath);
});
fs.realpathSync(path[, cache])
同步函数 realpath(2)。 返回解析出的路径。
fs.unlink(path, callback)
异步函数 unlink(2)。 回调函数只有一个参数:可能出现的异常.
fs.unlinkSync(path)
同步函数 unlink(2)。 返回 undefined。
fs.rmdir(path, callback)
异步函数 rmdir(2)。 回调函数只有一个参数:可能出现的异常.
fs.rmdirSync(path)
同步函数 rmdir(2)。 返回 undefined。
fs.mkdir(path[, mode], callback)
异步函数 mkdir(2)。 回调函数只有一个参数:可能出现的异常. mode 默认s to 0777.
fs.mkdirSync(path[, mode])
同步函数 mkdir(2)。 返回 undefined。
fs.readdir(path, callback)
异步函数 readdir(3)。 读取文件夹的内容。回调有2个参数 (err, files)files 是文件夹里除了名字为,'.'和'..'`之外的所有文件名。
fs.readdirSync(path)
同步函数 readdir(3)。 返回除了文件名为 '.' 和 '..'之外的所有文件.
fs.close(fd, callback)
异步函数 close(2)。 回调函数只有一个参数:可能出现的异常.
fs.closeSync(fd)
同步函数 close(2)。 返回 undefined。
fs.open(path, flags[, mode], callback)
异步函数 file open. 参见 open(2)。 flags 是:
'r' - 以只读模式打开.如果文件不存在,抛出异常。
'r+' -以读写模式打开.如果文件不存在,抛出异常。
'rs' - 同步的,以只读模式打开. 指令绕过操作系统直接使用本地文件系统缓存。这个功能主要用来打开 NFS 挂载的文件,因为它能让你跳过可能过时的本地缓存。如果对 I/O 性能很在乎,就不要使用这个标志位。
这里不是调用 fs.open() 变成同步阻塞请求,如果你想要这样,可以调用 fs.openSync()。
'rs+' - 同步模式下以读写方式打开文件。注意事项参见 'rs'.
'w' - 以只写模式打开。文件会被创建 (如果文件不存在) 或者覆盖 (如果存在)。
'wx' - 和 'w'类似,如果文件存储操作失败
'w+' - 以可读写方式打开。文件会被创建 (如果文件不存在) 或者覆盖 (如果存在)
'wx+' - 和 'w+'类似,如果文件存储操作失败。
'a' - 以附加的形式打开。如果文件不存在则创建一个。
'ax' - 和 'a'类似,如果文件存储操作失败。
'a+' - 以只读和附加的形式打开文件.若文件不存在,则会建立该文件
'ax+' - 和 'a+'类似,如果文件存储操作失败.
如果文件存在,参数mode 设置文件模式 (permission 和 sticky bits)。 默认是 0666, 可读写.
回调有2个参数 (err, fd).
排除标记 'x' (对应 open(2)的O_EXCL 标记) 保证 path 是新创建的。在 POSIX 系统里,即使文件不存在,也会被认定为文件存在。 排除标记不能确定在网络文件系统中是否有效。
Linux系统里,无法对以追加模式打开的文件进行指定位置写。系统核心忽略了位置参数,每次把数据写到文件的最后。
|
|