在 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.promisifyfs方法轉換為基於 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

閱讀時間
閱讀時間:3 分鐘
貢獻
編輯此頁面