用fs模块遍历文件夹内的所有文件,并且把所有文件重命名,为什么文件会莫名其妙的越来越少?
发布于 5个月前 作者 nanjixiong218 337 次浏览
    /*同步操作,没有问题
    if (fs.statSync(dirPath).isDirectory()) {
         fs.readdirSync(dirPath).forEach(function(file,i){
         var oldName = path.join(dirPath,file);
         var newName = path.join(dirPath,"xu"+i+".jpg");
         fs.renameSync(oldName,newName);
         });
         alert("ok");
    }
    */
    //等价的异步操作,一个个遍历执行重命名,每执行一次,都有部分文件被删除
    fs.stat(dirPath,function (err,status) {
        if(status.isDirectory()){
            fs.readdir(dirPath,function(err,files){
                (function next(i){
                    if(i<files.length){
                        console.log(files.length);
                        console.log(i);
                        var oldName = path.join(dirPath,files[i]);
                        var newName = path.join(dirPath,"xu"+i+".jpg");
                        fs.rename(oldName,newName,function(err){
                            if(err){
                                console.log(err);
                            }else{
                                next(++i);
                            }
                        });
                    }else{
                        alert("ok");
                    }

                }(0));

            });
        }
    })
2 回复

异步的时候context变了。可以试试异步时把文件加到数组里,再对数组处理。

@leapon 已经找到原因了,跟异步和同步无关,同步也会出现问题,问题出在重名上。

回到顶部