fs.promise模块

 我研究一个块的思路很简单.先看类,到底是从外到内,还是从外到内,再在内部循环.

开始先一个程序根据类,类内部的属性,方法,外部的方法.这样的结合可以

fs.promises API 提供了一组备用的异步文件系统的方法,它们返回 Promise 对象而不是使用回调。 API 可通过 require('fs').promises 访问。

 

FileHandle 类

 

FileHandle 对象是数字文件描述符的包装器。 FileHandle 的实例与数字文件描述符的不同之处在于它们提供了一个面向对象的 API 来处理文件。如果没有使用 filehandle.close() 方法关闭 FileHandle,则它可能会自动关闭文件描述符并触发进程警告,从而有助于防止内存泄漏。

FileHandle 对象的实例由 fsPromises.open() 方法在内部创建。

 

 

 

1.filehandle.writev(buffers[, position])

buffers <ArrayBufferView[]>
position <integer>
返回: <Promise>

 

将 ArrayBufferViews 数组写入该文件。

Promise 会被解决并带上一个对象,对象包含一个 bytesWritten 属性(表明写入的字节数)和一个 buffers 属性(指向 buffers 输入)。

position 指定文件开头的偏移量(数据应该被写入的位置)。 如果 typeof position !== 'number',则数据会被写入当前的位置。

在同一文件上多次调用 writev() 且不等待前面的操作完成,这是不安全的。

在 Linux 上,当以追加模式打开文件时,写入无法指定位置。 内核会忽略位置参数,并始终将数据追加到文件的末尾。

2.filehandle.writeFile(data, options)

data <string> | <Buffer> | <Uint8Array>
options <Object> | <string>

encoding <string> | <null> 默认值: 'utf8'。
mode <integer> 默认值: 0o666。
flag <string> 参阅支持的文件系统标志。默认值: 'w'。
返回: <Promise>

异步地将数据写入到一个文件,如果文件已存在则覆盖该文件。 data 可以是字符串或 buffer。 Promise 将会在成功时解决,且不带参数。

如果 data 是一个 buffer,则 encoding 选项会被忽略。

如果 options 是一个字符串,则它指定字符编码。

FileHandle 必须支持写入。

在同一个文件上多次使用 filehandle.writeFile() 且不等待 Promise 被解决(或被拒绝)是不安全的。

如果对文件句柄进行了一次或多次 filehandle.write() 调用,然后再调用 filehandle.writeFile(),则将从当前位置写入数据,直到文件结束。 它并不总是从文件的开头写入。

 

3.filehandle.write(string[, position[, encoding]])

string <string>
position <integer>
encoding <string> 默认值: 'utf8'。
返回: <Promise>

将 string 写入到文件。 如果 string 不是一个字符串,则该值会被强制转换为字符串。

Promise 会被解决并带上一个对象,对象包含一个 bytesWritten 属性(指定写入的字节数)和一个 buffer 属性(指向写入的 string)。

position 指定文件开头的偏移量(数据应该被写入的位置)。 如果 position 的类型不是一个 number,则数据会被写入当前的位置。 参阅 pwrite(2)

encoding 是期望的字符串编码。

在同一个文件上多次使用 filehandle.write() 且不等待 Promise 被解决(或被拒绝)是不安全的。 对于这种情况,建议使用 fs.createWriteStream()

在 Linux 上,当以追加模式打开文件时,写入无法指定位置。 内核会忽略位置参数,并始终将数据追加到文件的末尾。

 

4.filehandle.write(buffer[, offset[, length[, position]]])

buffer <Buffer> | <Uint8Array>
offset <integer>
length <integer>
position <integer>
返回: <Promise>

 

将 buffer 写入到文件。

Promise 会被解决并带上一个对象,对象包含一个 bytesWritten 属性(指定写入的字节数)和一个 buffer 属性(指向写入的 buffer)。

offset 决定 buffer 中要被写入的部位, length 是一个整数,指定要写入的字节数。

position 指定文件开头的偏移量(数据应该被写入的位置)。 如果 typeof position !== 'number',则数据会被写入当前的位置。 

5.filehandle.utimes(atime, mtime)

atime <number> | <string> | <Date>
mtime <number> | <string> | <Date>
返回: <Promise>

更改 FileHandle 指向的对象的文件系统时间戳,然后在成功时解决 Promise 且不带参数。 

6.filehandle.truncate(len)

len <integer> 默认值: 0
返回: <Promise>

截断文件,然后在成功时解决 Promise 且不带参数。

如果文件大于 len 个字节,则只有前面 len 个字节会保留在文件中。

如果文件小于 len 个字节,则会对其进行扩展,并且扩展部分将填充空字节('\0'

最后 3 个字节是空字节('\0'),以补充超出的截断。

 

7.filehandle.sync()

返回: <Promise>

Promise 将会在成功时解决,且不带参数。 

8.filehandle.stat([options])

options <Object>

bigint <boolean> 返回的 fs.Stats 对象中的数值是否应为 bigint 型。默认值: false。
返回: <Promise>

检索文件的 fs.Stats。 

9.filehandle.readFile(options)

options <Object> | <string>

encoding <string> | <null> 默认值: null
flag <string> 参阅支持的文件系统标志。默认值: 'r'。
返回: <Promise>

异步地读取文件的全部内容。

Promise 被解决时会带上文件的内容。 如果没有指定字符编码(使用 options.encoding),则数据会以 Buffer 对象返回。 否则,数据将会是一个字符串。

如果 options 是字符串,则它指定字符编码。

当 path 是目录时, fsPromises.readFile() 的行为是特定于平台的。 在 macOS、Linux 和 Windows 上,promise 将会被拒绝并带上一个错误。 在 FreeBSD 上,则将会返回目录内容的表示。

FileHandle 必须支持读取。

如果对文件句柄进行了一次或多次 filehandle.read() 调用,然后再调用 filehandle.readFile(),则将从当前位置读取数据,直到文件结束。 它并不总是从文件的开头读取。

 

10.filehandle.read(buffer, offset, length, position)

buffer <Buffer> | <Uint8Array>
offset <integer>
length <integer>
position <integer>
返回: <Promise>

从文件中读取数据。

buffer 是数据将写入的缓冲区。

offset 是 buffer 中开始写入的偏移量。

length 是一个整数,指定要读取的字节数。

position 参数指定从文件中开始读取的位置。 如果 position 为 null,则从当前文件位置读取数据,并更新文件位置。 如果 position 是整数,则文件位置将保持不变。

成功读取之后, Promise 会被解决并带上一个对象,对象上有一个 bytesRead 属性(指定读取的字节数)和一个 buffer 属性(指向传入的 buffer 参数)。

11.filehandle.fd

<number> 由 FileHandle 对象管理的数字文件描述符。

12.filehandle.datasync()

返回: <Promise> Promise 将会在成功时解决,且不带参数。

13.filehandle.close()

返回: <Promise> 如果底层的文件描述符被关闭则 Promise 将会被解决,如果关闭时发生错误则将 Promise 将会被拒绝。 关闭文件描述符。

14.filehandle.chown(uid, gid)

uid <integer>
gid <integer>
返回: <Promise>

更改文件的所有者,然后在成功时解决 Promise 且不带参数。 

15.filehandle.chmod(mode)

mode <integer>
返回: <Promise>

更改文件的权限。 Promise 将会在成功时解决,且不带参数。 

16.filehandle.appendFile(data, options)

data <string> | <Buffer>
options <Object> | <string>

encoding <string> | <null> 默认值: 'utf8'。
mode <integer> 默认值: 0o666
flag <string> 参阅支持的文件系统标志。默认值: 'a'。
返回: <Promise>

异步地将数据追加到文件,如果文件尚不存在则创建该文件。 data 可以是字符串或 Buffer。 Promise 将会在成功时解决,且不带参数。如果 options 是字符串,则它指定字符编码。FileHandle 必须被打开用以追加。那就是要使用open了

  1. fsPromises.access(path[, mode])
path <string> | <Buffer> | <URL>
mode <integer> 默认值: fs.constants.F_OK。
返回: <Promise>

测试用户对 path 指定的文件或目录的权限。 mode 参数是一个可选的整数,指定要执行的可访问性检查。

可以创建由两个或更多个值按位或组成的掩码(例如 fs.constants.W_OK | fs.constants.R_OK)。

如果可访问性检查成功,则 Promise 会被解决且不带值。 如果任何可访问性检查失败,则 Promise 会被拒绝并带上 Error 对象。

不建议在调用 fsPromises.open() 之前使用 fsPromises.access() 检查文件的可访问性。 这样做会引入竞态条件,因为其他进程可能会在两个调用之间更改文件的状态。 相反,应该直接打开、读取或写入文件,如果文件无法访问则处理引发的错误。

2. fsPromises.appendFile(path, data[, options])

path <string> | <Buffer> | <URL> | <FileHandle> 文件名或 FileHandle。
data <string> | <Buffer>
options <Object> | <string>

encoding <string> | <null> 默认值: 'utf8'。
mode <integer> 默认值: 0o666。
flag <string> 参阅支持的文件系统标志。默认值: 'a'。
返回: <Promise>

 异步地将数据追加到文件,如果文件尚不存在则创建该文件

 data 可以是字符串或 Buffer。 Promise 将会在成功时解决,且不带参数。如果 options 是字符串,则它指定字符编码。

path 可以指定为已打开用于追加(使用 fsPromises.open())的 FileHandle

 

 3.fsPromises.chmod(path, mode)

path <string> | <Buffer> | <URL>
mode <integer>
返回: <Promise>

更改文件的权限,然后在成功时解决 Promise 且不带参数。 

4.fsPromises.chown(path, uid, gid)

path <string> | <Buffer> | <URL>
uid <integer>
gid <integer>
返回: <Promise>

更改文件的所有者,然后在成功时解决 Promise 且不带参数。 

5.fsPromises.copyFile(src, dest[, flags])

src <string> | <Buffer> | <URL> 要拷贝的源文件名。
dest <string> | <Buffer> | <URL> 拷贝操作的目标文件名。
flags <number> 用于拷贝操作的修饰符。默认值: 0。
返回: <Promise>

异步地将 src 拷贝到 dest。 默认情况下,如果 dest 已经存在,则覆盖它。 Promise 将会在成功时解决,且不带参数。

Node.js 不保证拷贝操作的原子性。 如果在打开目标文件用于写入后发生错误,则 Node.js 将尝试删除目标文件。

 flags 是一个可选的整数,指定拷贝操作的行为。 可以创建由两个或更多个值按位或组成的掩码(比如 fs.constants.COPYFILE_EXCL| fs.constants.COPYFILE_FICLONE)。

fs.constants.COPYFILE_EXCL - 如果 dest 已存在,则拷贝操作将失败。
fs.constants.COPYFILE_FICLONE - 拷贝操作将尝试创建写时拷贝(copy-on-write)链接。如果平台不支持写时拷贝,则使用后备的拷贝机制。
fs.constants.COPYFILE_FICLONE_FORCE - 拷贝操作将尝试创建写时拷贝链接。如果平台不支持写时拷贝,则拷贝操作将失败。

6.fsPromises.lchmod(path, mode)

path <string> | <Buffer> | <URL>
mode <integer>
返回: <Promise>

更改符号链接的权限,然后在成功时解决 Promise 且不带参数。

7.fsPromises.lchown(path, uid, gid)

 

path <string> | <Buffer> | <URL>
uid <integer>
gid <integer>
返回: <Promise>

更改符号链接的拥有者,然后在成功时解决 Promise 且不带参数。

8.fsPromises.link(existingPath, newPath)

existingPath <string> | <Buffer> | <URL>
newPath <string> | <Buffer> | <URL>
返回: <Promise>

异步的 link(2)。 Promise 将会在成功时解决,且不带参数。

9.fsPromises.lstat(path[, options])

path <string> | <Buffer> | <URL>
options <Object>

bigint <boolean> 返回的 fs.Stats 对象中的数值是否应为 bigint 型。默认值: false。
返回: <Promise>

Promise 会被解决并带上用于给定的符号链接 path 的 fs.Stats 对象。

10.fsPromises.mkdir(path[, options])

path <string> | <Buffer> | <URL>
options <Object> | <integer>

recursive <boolean> 默认值: false。
mode <integer> Windows 上不支持。默认值: 0o777。
返回: <Promise>

异步地创建目录,然后在成功时解决 Promise 且不带参数。 

11.fsPromises.mkdtemp(prefix[, options])

prefix <string>
options <string> | <Object>

encoding <string> 默认值: 'utf8'。
返回: <Promise>

 创建一个唯一的临时目录,且解决 Promise 时带上创建的目录路径。 唯一的目录名称是通过在提供的 prefix 的末尾附加六个随机字符来生成的。 由于平台的不一致性,请避免在 prefix 中以 X 字符结尾。 在某些平台上,特别是 BSD,可以返回六个以上的随机字符,并用随机字符替换 prefix 中结尾的 X 字符。

可选的 options 参数可以是指定字符编码的字符串,也可以是具有指定要使用的字符编码的 encoding 属性的对象。

fsPromises.mkdtemp() 方法将六位随机选择的字符直接附加到 prefix 字符串。 例如,给定目录 /tmp,如果打算在 /tmp 中创建临时目录,则 prefix 必须在尾部加上特定平台的路径分隔符(require('path').sep)。

12.fsPromises.open(path, flags[, mode])

path <string> | <Buffer> | <URL>
flags <string> | <number> 参阅支持的文件系统标志。默认值: 'r'。
mode <integer> 默认值: 0o666(可读写)。
返回: <Promise>

异步地打开文件并返回一个 Promise,当解决时会带上一个 FileHandle 对象。 

mode 用于设置文件模式(权限和粘滞位),但仅限于创建文件时。有些字符 (< > : " / \ | ? *) 在 Windows 上是预留的

13.fsPromises.opendir(path[, options])

path <string> | <Buffer> | <URL>
options <Object>

encoding <string> | <null> 默认值: 'utf8'。
返回: <Promise> 包含 <fs.Dir>。

异步地打开目录。创建一个 fs.Dir,其中包含所有用于更进一步读取和清理目录的函数。encoding 选项用于在打开目录和后续的读取操作时设置 path 的字符编码。

14.fsPromises.readdir(path[, options])

path <string> | <Buffer> | <URL>
options <string> | <Object>

encoding <string> 默认值: 'utf8'。
withFileTypes <boolean> 默认值: false。
返回: <Promise>

读取目录的内容,然后解决 Promise 并带上一个数组(包含目录中的文件的名称,但不包括 '.' 和 '..')。

可选的 options 参数可以是指定编码的字符串,也可以是具有 encoding 属性的对象,该属性指定用于文件名的字符编码。 如果 encoding 设置为 'buffer',则返回的文件名是 Buffer 对象。

如果 options.withFileTypes 设置为 true,则解决的数组将包含 fs.Dirent 对象。

15.fsPromises.readFile(path[, options])

path <string> | <Buffer> | <URL> | <FileHandle> 文件名或 FileHandle。
options <Object> | <string>

encoding <string> | <null> 默认值: null。
flag <string> 参阅支持的文件系统标志。默认值: 'r'。
返回: <Promise>

异步地读取文件的全部内容。

Promise 被解决时会带上文件的内容。 如果没有指定字符编码(使用 options.encoding),则数据会以 Buffer 对象返回。 否则,数据将会是一个字符串。

如果 options 是字符串,则它指定字符编码。

当 path 是目录时, fsPromises.readFile() 的行为是特定于平台的。 在 macOS、Linux 和 Windows 上,promise 将会被拒绝并带上一个错误。 在 FreeBSD 上,则将会返回目录内容的表示。

指定的 FileHandle 必须支持读取。

16.fsPromises.readlink(path[, options])

path <string> | <Buffer> | <URL>
options <string> | <Object>

encoding <string> 默认值: 'utf8'。
返回: <Promise>

Promise 会在成功时解决,且带上 linkString

可选的 options 参数可以是指定编码的字符串,也可以是具有 encoding 属性的对象,该属性指定用于链接路径的字符编码。 如果 encoding 设置为 'buffer',则返回的链接路径将作为 Buffer 对象传入。

17.fsPromises.realpath(path[, options])

path <string> | <Buffer> | <URL>
options <string> | <Object>

encoding <string> 默认值: 'utf8'。
返回: <Promise>

使用与 fs.realpath.native() 函数相同的语义来判断 path 的实际位置,然后解决 Promise 并带上解析后的路径。

仅支持可转换为 UTF8 字符串的路径。

可选的 options 参数可以是指定编码的字符串,也可以是具有 encoding 属性的对象,该属性指定用于路径的字符编码。 如果 encoding 设置为 'buffer',则返回的路径将作为 Buffer 对象传入。

18.fsPromises.rename(oldPath, newPath)

oldPath <string> | <Buffer> | <URL>
newPath <string> | <Buffer> | <URL>
返回: <Promise>

将 oldPath 重命名为 newPath,然后在成功时解决 Promise 且不带参数。

19.fsPromises.rmdir(path[, options])

path <string> | <Buffer> | <URL>
options <Object>

emfileWait <integer> 如果遇到 EMFILE 错误,则 Node.js 将会在每次尝试时以 1 毫秒的线性回退重试该操作,直到超时持续时间超过此限制。 如果 recursive 选项不为 true,则忽略此选项。默认值: 1000。
maxBusyTries <integer> 如果遇到 EBUSY、 ENOTEMPTY 或 EPERM 错误,则 Node.js 将会在每次尝试时以 100 毫秒的线性回退等待重试该操作。 此选项代表重试的次数。如果 recursive 选项不为 true,则忽略此选项。默认值: 3。
recursive <boolean> 如果为 true,则执行递归的目录删除。在递归模式中,如果 path 不存在则不报告错误,并且在失败时重试操作。默认值: false。
返回: <Promise>

删除 path 指定的目录,然后在成功时解决 Promise 且不带参数。

在文件(而不是目录)上使用 fsPromises.rmdir() 会导致 Promise 被拒绝,在 Windows 上会带上 ENOENT 错误、在 POSIX 上会带上 ENOTDIR 错误。

20.fsPromises.stat(path[, options])

path <string> | <Buffer> | <URL>
options <Object>

bigint <boolean> 返回的 fs.Stats 对象中的数值是否应为 bigint 型。默认值: false。
返回: <Promise>

Promise 会被解决并带上 fs.Stats 对象(用于给定的 path)。

21.fsPromises.symlink(target, path[, type])

target <string> | <Buffer> | <URL>
path <string> | <Buffer> | <URL>
type <string> 默认值: 'file'。
返回: <Promise>

创建一个符号链接,然后在成功时解决 Promise 且不带参数。

type 参数仅在 Windows 上可用,可以是 'dir'、 'file' 或 'junction' 之一。 Windows 上使用 'junction' 要求目标路径是绝对路径。 当使用 'junction' 时, target 参数将自动标准化为绝对路径。

22.fsPromises.truncate(path[, len])

path <string> | <Buffer> | <URL>
len <integer> 默认值: 0。
返回: <Promise>

截断 path,然后在成功时解决 Promise 且不带参数。 path 必须是一个字符串或 Buffer

23.fsPromises.unlink(path)

path <string> | <Buffer> | <URL>
返回: <Promise>

Promise 将会在成功时解决,且不带参数。

24.fsPromises.utimes(path, atime, mtime)

path <string> | <Buffer> | <URL>
atime <number> | <string> | <Date>
mtime <number> | <string> | <Date>
返回: <Promise>

更改 path 指向的对象的文件系统时间戳,然后在成功时解决 Promise 且不带参数。

atime 和 mtime 参数遵循以下规则:

  • 值可以是表示 Unix 纪元时间的数字、 Date 对象、或类似 '123456789.0' 的数值字符串。
  • 如果该值无法转换为数值、或值为 NaN、 Infinity 或 -Infinity,则抛出 Error

25.fsPromises.writeFile(file, data[, options])

file <string> | <Buffer> | <URL> | <FileHandle> 文件名或 FileHandle。
data <string> | <Buffer> | <Uint8Array>
options <Object> | <string>

encoding <string> | <null> 默认值: 'utf8'。
mode <integer> 默认值: 0o666。
flag <string> 参阅支持的文件系统标志。默认值: 'w'。
返回: <Promise>

异步地将数据写入到一个文件,如果文件已存在则覆盖该文件。 data 可以是字符串或 buffer。 Promise 将会在成功时解决,且不带参数。

如果 data 是一个 buffer,则 encoding 选项会被忽略。

如果 options 是一个字符串,则它指定字符编码。

指定的 FileHandle 必须支持写入。

在同一个文件上多次使用 fsPromises.writeFile() 且不等待 Promise 被解决(或被拒绝)是不安全的。

 

总之初级方法返回的都是promise,但是需要看它有没有带什么其他的类,如果没有带其他的类,那么就用常规,如果带了其他的类,就可以使用别的方法去使用他们.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值