2017-05-12 3 views
0

Node.js内に、あらかじめ生成されたテストファイル(1000+)の名前を非同期的に変更しようとしています。複数のファイルの名前を変更すると、Node.jsでasyncronioslyケーシングエラーが発生する

コードは次のようになります。

const fs = require('fs') 
const { each } = require('async') 

each(files, file => { 
    let newfile = 'new' + file 
    fs.rename(file, newfile, err => { 
    err ? console.log(err) : console.log('renamed') 
    } 
}) 

これは、次のエラーにつながる:

Uncaught Error: ENOENT: no such file or directory, lstat '8d3320e35d22772f' at fs.lstatSync (fs.js:902:18) at Object.fs.lstatSync

それは同じエラーにネイティブforEachリードでeachを交換するので、asyncモジュールの問題ではありません。また、同期バージョンの名前をfs.renameSyncに変更しても問題はありません。

私は、ファイルを2回ほど動かそうとしていますが、間違いがどこにあるのかは分かりません。この仮定は、すべてのファイルの名前がす​​でに変更されているため、後でエラーが発生する可能性が非常に高いためです。誰かがそのような行動を引き起こすものをアドバイスできますか?

+0

'ファイル'配列はどのように見えますか?この配列のサンプルファイルパスはどのように見えますか? – forrert

+0

迅速な対応に感謝します。ファイル配列は問題ありません。名前の同期バージョン 'fs.renameSync'は問題ありません。質問が更新されました。 –

+0

'fs.rename()'が 'fs.lstatSync()'を使わないことは確信しています。それは本当に実行している唯一のコードですか? – robertklep

答えて

0

悪いです。ちょうど誰かが興味をそそられている場合、このエラーは基本的な関数に由来しています:

function rmDir(dir) { 

    var list = fs.readdirSync(dir); 

    for(var i = 0; i < list.length; i++) { 
     var dirOrFile = path.join(dir, list[i]); 
     var stat = fs.lstatSync(dirOrFile); 

     if(dirOrFile == "." || dirOrFile == "..") { 
      // pass these files 
     } else if (stat.isDirectory()) { 
      // rmdir recursively 
      rmDir(dirOrFile); 
     } 
//  else { fs.unlinkSync(dirOrFile) }     // rm fiilename 
    } 
    fs.rmdirSync(dir); 
} 
関連する問題