Node.js中如何通过已有的fd文件描述符获取FileHandle对象
问题解答
可以实现,你不需要修改原有基于FileHandle的业务代码,直接通过Node.js内置的fs.promises.open方法传入你同步获取的文件描述符即可生成对应的FileHandle实例。
Node.js的fs.promises.open方法支持传入数字类型的已打开文件描述符作为第一个参数,此时不会执行新的文件打开操作,仅会将现有fd封装为标准的FileHandle对象,完全兼容FileHandle的所有异步方法(包括你需要的writev)。
代码示例
const fs = require('fs'); const fsp = fs.promises; // 原有同步打开文件逻辑 const fd = fs.openSync('./target.txt', 'w+'); // 基于已有fd生成FileHandle,无额外IO操作 const fileHandle = await fsp.open(fd); // 直接复用原有基于FileHandle的业务代码 await fileHandle.writev([ Buffer.from('第一段内容'), Buffer.from('第二段内容') ]); // 释放资源,会自动关闭底层fd await fileHandle.close();
注意事项
- 生成FileHandle后,底层文件描述符的生命周期会和该实例绑定,调用
await fileHandle.close()时会自动关闭对应的fd,不要手动调用fs.closeSync(fd),避免重复关闭导致的异常。 - 该特性最低支持Node.js v10 版本,若你使用的版本更低,升级Node.js到LTS版本即可正常使用。
内容的提问来源于stack exchange,提问作者xmedeko
相关产品推荐
相关产品推荐

