在 Node.js 中使用檔案描述子
在您能夠與位於檔案系統中的檔案互動之前,您必須取得一個檔案描述子。
檔案描述子是對已開啟檔案的參照,是使用 fs
模組提供的 open()
方法開啟檔案後返回的數字(fd)。此數字(fd
)在作業系統中唯一識別已開啟的檔案。
const fs = require('node:fs');
fs.open('/Users/joe/test.txt', 'r', (err, fd) => {
// fd is our file descriptor
});
注意我們在fs.open()
調用中使用的第二個參數r
。
這個標誌表示我們打開文件以供讀取。
您通常會使用的其他標誌是
標誌 | 描述 | 如果文件不存在,則創建文件 |
---|---|---|
r+ | 此標誌將文件打開以供讀取和寫入 | ❌ |
w+ | 此標誌將文件打開以供讀取和寫入,並且還將流定位在文件開頭 | ✅ |
a | 此標誌將文件打開以供寫入,並且還將流定位在文件末尾 | ✅ |
a+ | 此標誌將文件打開以供讀取和寫入,並且還將流定位在文件末尾 | ✅ |
您還可以使用fs.openSync
方法打開文件,該方法返回文件描述符,而不是在回調中提供它
const fs = require('node:fs');
try {
const fd = fs.openSync('/Users/joe/test.txt', 'r');
} catch (err) {
console.error(err);
}
獲取文件描述符後,您可以以任何方式進行操作,例如調用fs.close()
以及與文件系統互動的其他操作。
您也可以使用基於 Promise 的fsPromises.open
方法來打開文件,該方法由fs/promises
模塊提供。
fs/promises
模塊僅從Node.js v14開始提供。在v14之前,在v10之後,您可以改用require('fs').promises
。在v10之前,在v8之後,您可以使用util.promisify
將fs
方法轉換為基於 Promise 的方法。
const fs = require('node:fs/promises');
// Or const fs = require('fs').promises before v14.
async function example() {
let filehandle;
try {
filehandle = await fs.open('/Users/joe/test.txt', 'r');
console.log(filehandle.fd);
console.log(await filehandle.readFile({ encoding: 'utf8' }));
} finally {
if (filehandle) await filehandle.close();
}
}
example();
以下是util.promisify
的示例
const fs = require('node:fs');
const util = require('node:util');
async function example() {
const open = util.promisify(fs.open);
const fd = await open('/Users/joe/test.txt', 'r');
}
example();
要查看有關fs/promises
模塊的更多詳細信息,請查看fs/promises API。