gpt4 book ai didi

node.js - 如何遍历所有文件,支持暂停和继续

转载 作者:搜寻专家 更新时间:2023-10-31 22:45:07 24 4
gpt4 key购买 nike

我创建了一个 NodeJS( Electron )代码来读取特定目录和子目录中的所有文件。我不想使用太多高清资源,所以我在文件夹之间使用 5 毫秒的延迟。

现在我的问题。我想要如果我的 NODE 进程停止?我希望能够从停止时继续。我应该怎么做?

换句话说:如何在遍历所有文件和文件夹时保持当前状态的索引,以便我可以在它停止时继续遍历。

谢谢

我的代码:

var walkAll=function(options){
var x=0
walk(options.dir,function(){})
function walk(dir,callback) {
var files=fs.readdirSync(dir);
var stat;
async.eachSeries(files,function(file,next){
file=dir +'/' + file
if (dir.match(/Recycle/)) return next()
if (dir.match(/.git/)) return next()
if (dir.match(/node_modules/)) return next()
fs.lstat(file,function(err,stat){
if(err) return next()
if(stat.mode==41398) return next()
if (stat.isDirectory()) {
setTimeout(function(file){
walk(file,next)
}.bind(null,file),5)
}
else{
x++
if(false || x % 1000===0) console.log((new Date().valueOf()-start)/1000,x,file)
next()
}
})
},function(){
callback()
})
}
}

walkAll({
dir:'c:/',
delay:1000
});

最佳答案

保留要访问的子目录列表,并在每次迭代时更新列表。

以下示例中的walk 函数获取前一个状态,并返回具有下一个状态的下一个子目录的文件。

可以在进程停止前保存状态,重启时加载保存的状态继续遍历。

function walk(state, readdir) {
let files = [], next = [];
while (state.length > 0) {
try {
const current = state.shift()
files = readdir(current).map(file => current + '/' + file)
next = state.concat(files)
break
} catch(e) {}
}
return [next, files]
}

function main() {
const {writeFileSync: writeFile, readdirSync: readdir} = require('fs')
const save = './walk.json'

let state
try {
state = require(save)
} catch(e) {}
if (!state || state.length < 1) state = ['.']

const [nextState, files] = walk(state, readdir)
console.log(files)
writeFile(save, JSON.stringify(nextState, null, 2))
}

main()

关于node.js - 如何遍历所有文件,支持暂停和继续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38714342/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com