以下代码的作用是从一个文件夹中取出几个文本文件并将它们附加到一个文件中:
#!/usr/bin/env node
'use strict'
const fs = require('fs')
, input = process.argv[2]
if (process.argv.length < 3) {
console.log('Usage: node ' + process.argv[1] + ' FILENAME')
process.exit(1)
}
fs.readdir(__dirname + `/${input}/`, (err, files) => {
if (err) {
return
}
files.forEach((file, index) => {
fs.readFile(__dirname + `/${input}/` + file, 'utf8', (err, data) => {
let result
if (err) {
console.log(err)
}
if (index == files.length - 1) {
result = `${data}`
} else {
result = `${data}\n`
}
fs.appendFile("merged.txt", result, (err) => {
if (err) {
console.log(err)
} else {
console.log(result)
}
})
})
})
})
假设我有一个名为 docs
的文件夹,里面有 doc1.txt、doc2.txt、doc3.txt及其内容
## Doc 1, # # Doc 2 和 ## Doc 3 分别。该代码将生成一个名为
merged.txt` 的文件,其内容为:
## Doc 1
## Doc 2
## Doc 3
它工作正常。但有时顺序是错误的。我会得到类似的东西:
## Doc 1
## Doc 3
## Doc 2
特别是当有很多文件时。
如何修改代码以防止出现此问题?
最佳答案
您可以将 fs.appendFile
更改为 fs.appendFileSync
(快速而肮脏,但不是最佳解决方案),或者您可以使用 连续运行事件
方法 ( https://www.npmjs.com/package/async#eachSeries )。async
模块的 >eachSeries
关于javascript - fs.appendFile 没有按顺序追加数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30448386/