在 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。