在 Node.js 中使用文件描述符
在与文件系统中的文件进行交互之前,你必须获取一个文件描述符。
文件描述符是对打开文件的引用,是使用 fs 模块提供的 open() 方法打开文件时返回的一个数字 (fd)。这个数字 (fd) 在操作系统中唯一标识一个打开的文件。
const = ('node:fs');
.('/Users/joe/test.txt', 'r', (, ) => {
// fd is our file descriptor
});
请注意我们用作 fs.open() 调用的第二个参数的 r。
该标志意味着我们打开文件进行读取。
你将经常使用的其他标志有:
| 标志 | 描述 | 如果文件不存在,则创建文件 |
|---|---|---|
| r+ | 此标志打开文件用于读取和写入 | ❌ |
| w+ | 此标志打开文件用于读取和写入,并且它还将流定位在文件的开头 | ✅ |
| a | 此标志打开文件用于写入,并且它还将流定位在文件的末尾 | ✅ |
| a+ | 此标志打开文件用于读取和写入,并且它还将流定位在文件的末尾 | ✅ |
你还可以使用 fs.openSync 方法打开文件,该方法返回文件描述符,而不是在回调中提供它
const = ('node:fs');
try {
const = .('/Users/joe/test.txt', 'r');
} catch () {
.();
}
无论你选择哪种方式,一旦获得文件描述符,就可以执行所有需要它的操作,例如调用 fs.close() 和许多其他与文件系统交互的操作。
你还可以使用 fs/promises 模块提供的基于 Promise 的 fsPromises.open 方法打开文件。
fs/promises 模块仅从 Node.js v14 开始提供。在 v14 之前,v10 之后,你可以使用 require('fs').promises。在 v10 之前,v8 之后,你可以使用 util.promisify 将 fs 方法转换为基于 Promise 的方法。
const = ('node:fs/promises');
// Or const fs = require('fs').promises before v14.
async function () {
let ;
try {
= await .('/Users/joe/test.txt', 'r');
.(.);
.(await .({ : 'utf8' }));
} finally {
if () {
await .();
}
}
}
();
这是 util.promisify 的一个例子
const = ('node:fs');
const = ('node:util');
async function () {
const = .(.);
const = await ('/Users/joe/test.txt', 'r');
}
();
要查看有关 fs/promises 模块的更多详细信息,请查看 fs/promises API。