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

閱讀時間
2 分鐘
作者
貢獻
編輯此頁面