【问题标题】:Why does fs.open return a number?为什么 fs.open 返回一个数字?
【发布时间】:2019-03-08 04:00:10
【问题描述】:

我正在尝试使用节点/打字稿来使用此代码读取文件:

const openFile = util.promisify(fs.open);
write(data: Buffer, index: number) {
    if (!checkPieceIntegrity(data, this.pieceMap[index])) {
        return false;
    } else {
        return openFile(this.path, "r+")
            .then(fd => {
                const writeStream = createWriteStream(fd, {
                    flags: "r+",
                    start: index * this.pieceLength,
                    autoClose: true,
                })

                return util.promisify(writeStream.write)(data);
            })


    }
}

但是当我尝试使用tsc 编译时,我得到了错误:

Argument of type 'number' is not assignable to parameter of type 'PathLike'。

参考这一行:

const writeStream = createWriteStream(fd, {.

node.js 文档说 fs.open 返回一个文件描述符,而不是一个数字,那么为什么打字稿认为 fd 是一个数字,我怎样才能让它识别为文件描述符?

【问题讨论】:

    标签: node.js typescript fs


    【解决方案1】:

    fs.open 返回一个文件描述符(作为一个整数)。但是createWriteStream 接收<string> | <Buffer> | <URL> 作为它的第一个参数,而不是文件描述符。

    检查fs.write 是否有接收文件描述符并允许写入文件的函数。

    【讨论】:

    • 谢谢,我想我只是被文件描述符是一个数字这一事实吓倒了。文件描述符代表什么?它只是磁盘上的一个位置吗?
    • @schu34 - 操作系统级别的文件描述符表示操作系统内部的数据结构,用于保持磁盘上打开文件的状态。 C 中的文件描述符是指向数据结构的指针,该数据结构保持操作系统级别的文件描述符和其他状态,例如当前写入位置等。node.js 中的文件描述符编号是某种表或映射的索引在 node.js 内部,它让 node.js 内部获取 C 级文件描述符,因此它可以在其上调用 C 文件函数(进而获取 OS 级文件描述符)并对文件执行操作。
    • @schu34 - 它可能只是 node.js 中的一个数字,因为 node.js 没有适合它实际表示的类型。因此,他们只是使用了一个抽象数字,文件操作背后的本机代码可以通过某种映射或表查找变成真正的本机代码文件描述符。
    猜你喜欢
    • 2014-04-22
    • 1970-01-01
    • 2010-10-04
    • 1970-01-01
    • 2014-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多