【问题标题】:Getting bad file descriptor error while using fs.openFileSync in node.js在 node.js 中使用 fs.openFileSync 时出现错误的文件描述符错误
【发布时间】:2021-08-01 14:23:48
【问题描述】:

我将 xlsx 文件中的数据放入 csv 文件中。这是我的代码:-

const file = fs.openSync('/home/rahul/example/sample.csv', 'w')
const workbook = new exceljs.Workbook();
workbook.xlsx.readFile( path.join(__dirname, '' + args.filename)).then(function() {

    const worksheet = workbook.getWorksheet('sheet3');

    worksheet.eachRow(function(row){
        try{
            const buffer = array2CsvLine(row.values)
            fs.writeSync(file, buffer, { flag: 'a' })
        }
        catch(err){
            console.log('error related to fs.writeSync function')
            console.log(err)
        }
    })
    //fs.closeSync(file)
})
fs.closeSync(file)

它给了我这个错误:-

error related to fs.writeSync function
{ Error: EBADF: bad file descriptor, write
    at Object.writeSync (fs.js:569:3)
    at /home/rahul/min-wage/xls2csv.js:73:16
    at _rows.forEach.row (/home/rahul/min-wage/node_modules/exceljs/lib/doc/worksheet.js:515:11)
    at Array.forEach (<anonymous>)
    at Worksheet.eachRow (/home/rahul/min-wage/node_modules/exceljs/lib/doc/worksheet.js:513:18)
    at /home/rahul/min-wage/xls2csv.js:70:15 errno: -9, syscall: 'write', code: 'EBADF' }

但是如果我使用注释的fs.closeSync(file),那么它工作正常。我不知道为什么会这样?我想,我也可以在全球范围内关闭文件。

【问题讨论】:

  • 什么是file?这段代码中没有任何东西可以分配它,或者将它作为参数传递。
  • 我已经修改了代码,请再看一遍。
  • 谢谢。我建议将其转换为minimal reproducible example,因为要么这仅在您使用 exceljs 时发生,在这种情况下,您需要向制作该问题的人提出问题,或者即使在没有什么特别的情况下也会发生,在这种情况下,这段代码远比它需要的复杂。 (当然,弄清楚如何对 exceljs 生成的值进行硬编码需要使用一些控制台日志运行几次,但也只需使用一些控制台日志运行几次。特别是因为您不需要超过两行伪造)

标签: javascript node.js fs exceljs


【解决方案1】:

调用:

fs.closeSync(file)

... 在 promise 解决之前被调用。只需将其从最后一行中删除,然后取消注释 Promise 中的另一个调用即可。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-17
    • 2016-09-17
    • 2014-12-07
    • 2021-03-12
    • 2020-12-23
    • 2012-05-04
    • 1970-01-01
    • 2019-02-26
    相关资源
    最近更新 更多