三木社区

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 267|回复: 0
打印 上一主题 下一主题

nodejs文件系统3

[复制链接]

1562

主题

1564

帖子

4904

积分

博士

Rank: 8Rank: 8

积分
4904
跳转到指定楼层
楼主
发表于 2017-8-8 07:50:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
fs.exists(path, callback)
判断文件是否存在,回调函数参数是 bool 值。例如:
  1. fs.exists('/etc/passwd', function (exists) {
  2.   util.debug(exists ? "it's there" : "no passwd!");
  3. });
复制代码
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 是否能被当前的进程读写。

  1. fs.access('/etc/passwd', fs.R_OK | fs.W_OK, function(err) {
  2.   util.debug(err ? 'no access!' : 'can read/write');
  3. });
复制代码
fs.accessSync(path[, mode])
fs.access 的同步版本. 如果发生错误抛出异常,否则不做任何事情。
类: fs.Stats
fs.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),返回的字符串和下面类似:
  1. { dev: 2114,
  2.   ino: 48064969,
  3.   mode: 33188,
  4.   nlink: 1,
  5.   uid: 85,
  6.   gid: 100,
  7.   rdev: 0,
  8.   size: 527,
  9.   blksize: 4096,
  10.   blocks: 8,
  11.   atime: Mon, 10 Oct 2011 23:24:11 GMT,
  12.   mtime: Mon, 10 Oct 2011 23:24:11 GMT,
  13.   ctime: Mon, 10 Oct 2011 23:24:11 GMT,
  14.   birthtime: Mon, 10 Oct 2011 23:24:11 GMT }
复制代码
  1. atime, mtime, birthtime, 和 ctime 都是 Date 的实例,需要使用合适的方法来比较这些值。通常使用 getTime() 来获取时间戳(毫秒,从 1 January 1970 00:00:00 UTC 开始算),这个整数基本能满足任何比较条件。也有一些其他方法来显示额外信息。更多参见MDN JavaScript Reference
  2. Stat Time Values

  3. 状态对象(stat object)有以下语义:
  4. atime 访问时间 - 文件的最后访问时间. mknod(2), utimes(2), 和 read(2) 等系统调用可以改变.
  5. mtime 修改时间 - 文件的最后修改时间. mknod(2), utimes(2), 和 write(2)等系统调用可以改变.
  6. ctime 改变时间 - 文件状态(inode)的最后修改时间. chmod(2), chown(2),link(2), mknod(2), rename(2), unlink(2), utimes(2), read(2), 和 write(2)等系统调用可以改变.
  7. birthtime "Birth Time" - 文件创建时间,文件创建时生成。 在一些不提供文件 birthtime 的文件系统中, 这个字段会使用 ctime 或 1970-01-01T00:00Z (ie, unix epoch timestamp 0)来填充。 在 Darwin 和其他 FreeBSD 系统变体中, 也将 atime 显式地设置成比它现在的 birthtime 更早的一个时间值,这个过程使用了 utimes(2) 系统调用。
  8. 在 Node v0.12 版本之前, Windows 系统里 ctime 有 birthtime 值. 注意在v.0.12版本中, ctime 不再是"creation time", 而且在Unix系统中,他一直都不是。
  9. fs.createReadStream(path[, options])

  10. 返回可读流对象 (见 Readable Stream)。
  11. options 默认值如下:
复制代码
  1. { flags: 'r',
  2.   encoding: null,
  3.   fd: null,
  4.   mode: 0666,
  5.   autoClose: true
  6. }
复制代码
参数 options 提供 start 和 end 位置来读取文件的特定范围内容,而不是整个文件。start 和 end 都在文件范围里,并从 0 开始, encoding 是 'utf8', 'ascii', 或 'base64'。
如果给了 fd 值, ReadStream 将会忽略 path 参数,而使用文件描述,这样不会触发任何 open 事件。
如果 autoClose 为 false,即使发生错误文件也不会关闭,需要你来负责关闭,避免文件描述符泄露。如果 autoClose 是 true(默认值),遇到 error 或 end ,文件描述符将会自动关闭。
例如,从100个字节的文件里,读取最少10个字节:

  1. fs.createReadStream('sample.txt', {start: 90, end: 99});
复制代码
Class: fs.ReadStream
ReadStream 是 Readable Stream
Event: 'open'
  • fd {Integer} ReadStream 所使用的文件描述符。
当创建文件的ReadStream时触发。
fs.createWriteStream(path[, options])
返回一个新的写对象 (参见 Writable Stream)。
options 是一个对象,默认值:
  1. { flags: 'w',
  2.   encoding: null,
  3.   fd: null,
  4.   mode: 0666 }
复制代码
options 也可以包含一个 start 选项,在指定文件中写入数据开始位置。 修改而不替换文件需要 flags 的模式指定为 r+ 而不是默值的 w.
和之前的 ReadStream 类似,如果 fd 不为空,WriteStream 将会忽略 path 参数,转而使用文件描述,这样不会触发任何 open 事件。
类: fs.WriteStream
WriteStream 是 Writable Stream
Event: 'open'
  • fd {Integer} WriteStream 所用的文件描述符
打开 WriteStream file 时触发。
file.bytesWritten
目前写入的字节数,不含等待写入的数据。
Class: fs.FSWatcher
fs.watch() 返回的对象就是这个类.
watcher.close()
停止观察 fs.FSWatcher 对象中的更改。
Event: 'change'
  • event {String} fs 改变的类型
  • filename {String} 改变的文件名 (if relevant/available)
当监听的文件或文件夹改变的时候触发,参见fs.watch
Event: 'error'
  • error {Error object}
错误发生时触发。

回复

使用道具 举报

Archiver|手机版|小黑屋|三木电子社区 ( 辽ICP备11000133号-4 )

辽公网安备 21021702000620号

GMT+8, 2025-6-27 00:07 , Processed in 0.053421 second(s), 23 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表