fs.exists(path, callback) 判断文件是否存在,回调函数参数是 bool 值。例如: - fs.exists('/etc/passwd', function (exists) {
- util.debug(exists ? "it's there" : "no passwd!");
- });
复制代码fs.exists() 是老版本的函数,因此在代码里不要用。 另外,打开文件前判断是否存在有漏洞,在fs.exists() 和 fs.open() 调用中间,另外一个进程有可能已经移除了文件。最好用 fs.open() 来打开文件,根据回调函数来判断是否有错误。 fs.exists() 未来会被移除。 fs.existsSync(path)fs.exists() 的同步版本. 如果文件存在返回 true, 否则返回false。 fs.existsSync() 未来会被移除。 fs.access(path[, mode], callback)测试由参数 path 指向的文件的用户权限。可选参数 mode 为整数,它表示需要检查的权限。下面列出了所有值。mode 可以是单个值,或者可以通过或运算,掩码运算实现多个权限检查。 - fs.F_OK - 文件是对于进程可见,可以用来检查文件是否存在。参数 mode 的默认值。
- fs.R_OK - 文件对于进程是否可读。
- fs.W_OK - 文件对于进程是否可写。
- fs.X_OK - 文件对于进程是否可执行。(Windows系统不可用,执行效果等同fs.F_OK)
第三个参数是回调函数。如果检查失败,回调函数的参数就是响应的错误。下面的例子检查文件/etc/passwd 是否能被当前的进程读写。
- fs.access('/etc/passwd', fs.R_OK | fs.W_OK, function(err) {
- util.debug(err ? 'no access!' : 'can read/write');
- });
复制代码 fs.accessSync(path[, mode])fs.access 的同步版本. 如果发生错误抛出异常,否则不做任何事情。 类: fs.Statsfs.stat(), fs.lstat() 和 fs.fstat() 以及同步版本的返回对象。 - stats.isFile()
- stats.isDirectory()
- stats.isBlockDevice()
- stats.isCharacterDevice()
- stats.isSymbolicLink() (only valid with fs.lstat())
- stats.isFIFO()
- stats.isSocket()
对普通文件使用 util.inspect(stats),返回的字符串和下面类似: - { 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,
- birthtime: Mon, 10 Oct 2011 23:24:11 GMT }
复制代码- atime, mtime, birthtime, 和 ctime 都是 Date 的实例,需要使用合适的方法来比较这些值。通常使用 getTime() 来获取时间戳(毫秒,从 1 January 1970 00:00:00 UTC 开始算),这个整数基本能满足任何比较条件。也有一些其他方法来显示额外信息。更多参见MDN JavaScript Reference
- Stat Time Values
- 状态对象(stat object)有以下语义:
- atime 访问时间 - 文件的最后访问时间. mknod(2), utimes(2), 和 read(2) 等系统调用可以改变.
- mtime 修改时间 - 文件的最后修改时间. mknod(2), utimes(2), 和 write(2)等系统调用可以改变.
- ctime 改变时间 - 文件状态(inode)的最后修改时间. chmod(2), chown(2),link(2), mknod(2), rename(2), unlink(2), utimes(2), read(2), 和 write(2)等系统调用可以改变.
- birthtime "Birth Time" - 文件创建时间,文件创建时生成。 在一些不提供文件 birthtime 的文件系统中, 这个字段会使用 ctime 或 1970-01-01T00:00Z (ie, unix epoch timestamp 0)来填充。 在 Darwin 和其他 FreeBSD 系统变体中, 也将 atime 显式地设置成比它现在的 birthtime 更早的一个时间值,这个过程使用了 utimes(2) 系统调用。
- 在 Node v0.12 版本之前, Windows 系统里 ctime 有 birthtime 值. 注意在v.0.12版本中, ctime 不再是"creation time", 而且在Unix系统中,他一直都不是。
- fs.createReadStream(path[, options])
- 返回可读流对象 (见 Readable Stream)。
- options 默认值如下:
复制代码- { flags: 'r',
- encoding: null,
- fd: null,
- mode: 0666,
- autoClose: true
- }
复制代码参数 options 提供 start 和 end 位置来读取文件的特定范围内容,而不是整个文件。start 和 end 都在文件范围里,并从 0 开始, encoding 是 'utf8', 'ascii', 或 'base64'。 如果给了 fd 值, ReadStream 将会忽略 path 参数,而使用文件描述,这样不会触发任何 open 事件。 如果 autoClose 为 false,即使发生错误文件也不会关闭,需要你来负责关闭,避免文件描述符泄露。如果 autoClose 是 true(默认值),遇到 error 或 end ,文件描述符将会自动关闭。 例如,从100个字节的文件里,读取最少10个字节:
- fs.createReadStream('sample.txt', {start: 90, end: 99});
复制代码 Class: fs.ReadStreamEvent: 'open'- fd {Integer} ReadStream 所使用的文件描述符。
当创建文件的ReadStream时触发。 fs.createWriteStream(path[, options])返回一个新的写对象 (参见 Writable Stream)。 options 是一个对象,默认值: - { flags: 'w',
- encoding: null,
- fd: null,
- mode: 0666 }
复制代码options 也可以包含一个 start 选项,在指定文件中写入数据开始位置。 修改而不替换文件需要 flags 的模式指定为 r+ 而不是默值的 w. 和之前的 ReadStream 类似,如果 fd 不为空,WriteStream 将会忽略 path 参数,转而使用文件描述,这样不会触发任何 open 事件。 类: fs.WriteStreamEvent: 'open'- fd {Integer} WriteStream 所用的文件描述符
打开 WriteStream file 时触发。 file.bytesWritten目前写入的字节数,不含等待写入的数据。 Class: fs.FSWatcherfs.watch() 返回的对象就是这个类. watcher.close()停止观察 fs.FSWatcher 对象中的更改。 Event: 'change'- event {String} fs 改变的类型
- filename {String} 改变的文件名 (if relevant/available)
Event: 'error'错误发生时触发。
|