三木社区

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

nodejs文件系统2

[复制链接]

1562

主题

1564

帖子

4904

积分

博士

Rank: 8Rank: 8

积分
4904
跳转到指定楼层
楼主
发表于 2017-8-8 07:44:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 blake 于 2017-8-8 07:47 编辑

fs.openSync(path, flags[, mode])

fs.open() 的同步版本. 返回整数形式的文件描述符。.
fs.utimes(path, atime, mtime, callback)

改变指定路径文件的时间戳。
fs.utimesSync(path, atime, mtime)

fs.utimes() 的同步版本. 返回 undefined。
fs.futimes(fd, atime, mtime, callback)

改变传入的文件描述符指向文件的时间戳。
fs.futimesSync(fd, atime, mtime)

fs.futimes() 的同步版本. 返回 undefined。
fs.fsync(fd, callback)

异步函数 fsync(2)。 回调函数只有一个参数:可能出现的异常.
fs.fsyncSync(fd)

同步 fsync(2)。 返回 undefined。
fs.write(fd, buffer, offset, length[, position], callback)

将 buffer 写到 fd指定的文件里。
参数 offset 和 length 确定写哪个部分的缓存。
参数 position 是要写入的文件位置。如果 typeof position !== 'number',将会在当前位置写入。参见 pwrite(2)。
回调函数有三个参数 (err, written, buffer),written 指定 buffer的多少字节用来写。
注意,如果 fs.write 的回调还没执行,就多次调用 fs.write ,这样很不安全。因此,推荐使用 fs.createWriteStream 。
Linux系统里,无法对以追加模式打开的文件进行指定位置写。系统核心忽略了位置参数,每次把数据写到文件的最后。
fs.write(fd, data[, position[, encoding]], callback)

将 buffer 写到 fd指定的文件里。如果 data 不是 buffer,那么它就会被强制转换为字符串。
参数 position 是要写入的文件位置。如果 typeof position !== 'number',将会在当前位置写入。参见 pwrite(2)。
参数 encoding :字符串的编码方式.
回调函数有三个参数 (err, written, buffer),written 指定 buffer的多少字节用来写。注意写入的字节(bytes)和字符(string characters)不同。参见Buffer.byteLength。
和写入 buffer 不同,必须写入整个字符串,不能截取字符串。这是因为返回的字节的位移跟字符串的位移是不一样的。
注意,如果 fs.write 的回调还没执行,就多次调用 fs.write ,这样很不安全。因此,推荐使用 fs.createWriteStream
Linux系统里,无法对以追加模式打开的文件进行指定位置写。系统核心忽略了位置参数,每次把数据写到文件的最后。
fs.writeSync(fd, buffer, offset, length[, position])

fs.writeSync(fd, data[, position[, encoding]])

fs.write() 的同步版本. 返回要写的bytes数.
fs.read(fd, buffer, offset, length, position, callback)

读取 fd指定文件的数据。
buffer 是缓冲区,数据将会写入到这里.
offset 写入的偏移量
length 需要读的文件长度
position 读取的文件起始位置,如果是 position 是 null, 将会从当前位置读。
回调函数有3个参数, (err, bytesRead, buffer).


fs.readSync(fd, buffer, offset, length, position)

fs.read 的同步版本. 返回 bytesRead 的数量.
fs.readFile(filename[, options], callback)

filename {String}
options {Object}
encoding {String | Null} 默认 = null
flag {String} 默认 = 'r'
callback {Function}
异步读取整个文件的内容。例如:


  1. fs.readFile('/etc/passwd', function (err, data) {
  2. if (err) throw err;
  3. console.log(data);
  4. });
复制代码
回调函数有2个参数 (err, data), 参数 data 是文件的内容。如果没有指定参数 encoding, 返回原生 buffer
fs.readFileSync(filename[, options])

fs.readFile 的同步版本. 返回整个文件的内容.
如果没有指定参数 encoding, 返回buffer。
fs.writeFile(filename, data[, options], callback)

filename {String}
data {String | Buffer}
options {Object}
encoding {String | Null} 默认 = 'utf8'
mode {Number} 默认 = 438 (aka 0666 in Octal)
flag {String} 默认 = 'w'
callback {Function}
异步写文件,如果文件已经存在则替换。 data 可以是缓存或者字符串。
如果参数 data 是 buffer,会忽略参数 encoding。默认值是 'utf8'。
列如:

  1. fs.writeFile('message.txt', 'Hello Node', function (err) {
  2.   if (err) throw err;
  3.   console.log('It\'s saved!');
  4. });
复制代码
fs.writeFileSync(filename, data[, options])

fs.writeFile 的同步版本. 返回 undefined。
fs.appendFile(filename, data[, options], callback)

filename {String}
data {String | Buffer}
options {Object}
encoding {String | Null} 默认 = 'utf8'
mode {Number} 默认 = 438 (aka 0666 in Octal)
flag {String} 默认 = 'a'
callback {Function}
异步的给文件添加数据,如果文件不存在,就创建一个。 data 可以是缓存或者字符串。
例如:

  1. fs.appendFile('message.txt', 'data to append', function (err) {
  2.   if (err) throw err;
  3.   console.log('The "data to append" was appended to file!');
  4. });
复制代码
fs.appendFileSync(filename, data[, options])

fs.appendFile 的同步版本. 返回 undefined。
fs.watchFile(filename[, options], listener)


  1. 稳定性: 2 - 不稳定。  尽可能的用 fs.watch 来替换。
复制代码
监视 filename 文件的变化。每当文件被访问的时候都会调用listener。
第二个参数可选。如果有,它必须包含两个 boolean 参数(persistent 和 interval)的对象。 persistent 指定文件被监视时进程是否继续运行。 interval指定了查询文件的间隔,以毫秒为单位。缺省值为{ persistent: true, interval: 5007 }。
listener 有两个参数,第一个为文件现在的状态,第二个为文件的前一个状态:

  1. fs.watchFile('message.text', function (curr, prev) {
  2.   console.log('the current mtime is: ' + curr.mtime);
  3.   console.log('the previous mtime was: ' + prev.mtime);
  4. });
复制代码


listener中的文件状态对象类型为 fs.Stat。
如果想修改文件时被通知,而不是访问的时候就通知,可以比较 curr.mtime 和 prev.mtime。
fs.unwatchFile(filename[, listener])
  1. 稳定性: 2 - 不稳定. 尽可能的用 fs.watch 来替换。
复制代码
停止监视 filename 文件的变化。如果指定了 listener,那只会移除这个 listener。否则,移除所有的 listener,并会停止监视 filename。
调用 fs.unwatchFile()停止监视一个没被监视的文件,不会触发错误,而会发生一个no-op。
fs.watch(filename[, options][, listener])


  1. 稳定性: 2 - 不稳定.
复制代码
观察 filename 指定的文件或文件夹的改变。返回对象是 fs.FSWatcher。
第二个参数可选。如果有,它必须是包含两个 boolean 参数(persistent 和 recursive)的对象。 persistent 指定文件被监视时进程是否继续运行。 recursive表明是监视所有的子文件夹还是当前文件夹,这个参数只有监视对象是文件夹时才有效,而且仅在支持的系统里有效(参见下面注意事项)。
默认值 { persistent: true, recursive: false }.
回调函数有2个参数 (event, filename)。event 是 rename 或 change。filename 是触发事件的文件名。
注意事项

fs.watch API 不是 100% 的跨平台兼容,可能在某些情况下不可用。
recursive 参数仅在 OS X 上可用。仅 FSEvents 支持这个类型文件的监视,所以未来也不太可能有新的平台加入。
可用性

这些特性依赖于底层系统提供文件系统变动的通知。
Linux 系统,使用 inotify.
BSD 系统,使用 kqueue.
OS X,文件使用 kqueue ,文件夹使用 FSEvents.
SunOS 系统(包括 Solaris 和 SmartOS),使用 event ports.
Windows 系统, 依赖与 ReadDirectoryChangesW.
如果底层系统函数不可用,那么fs.watch 就无法工作。例如,监视网络文件系统(NFS, SMB, 等)经常不能用。你仍然可以用 fs.watchFile 查询,但是会比较慢,且不可靠。
文件名参数

回调函数中提供文件名参数,不是每个平台都能用(Linux 和 Windows 就不行)。即使在可用的平台,也不能保证都能提供。所以不要假设回调函数中 filename 参数有效,要在代码里添加一些为空的逻辑判断。


  1. fs.watch('somedir', function (event, filename) {
  2.   console.log('event is: ' + event);
  3.   if (filename) {
  4.     console.log('filename provided: ' + filename);
  5.   } else {
  6.     console.log('filename not provided');
  7.   }
  8. });
复制代码


回复

使用道具 举报

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

辽公网安备 21021702000620号

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

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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