2016-06-21 2 views
0

大量のファイル(25000など)を非同期でコピーする必要があります。私はこのライブラリを使用しています:https://github.com/stephenmathieson/node-cpnodejsで大量のファイルをコピーしていますか?

これは私のコードです:

  for(var i = 0; i < 25000; i++){ 
      cp(origin[i], dest[i], function(err){ 
       console.log("successfully copied") 
      }) 
     } 

これは、ループを完了しますが、それはすべての項目をコピーしdoens't。 「正常にコピーされました」は、6000〜8000回の間に呼び出されます。その後、それはもはやコピーしません。それはメモリまたは非同期タスクの制限と関係がありますか?

助けていただけたら幸いです!

答えて

2

コピー機能は、通常は非同期であることを示す手掛かりとなるコールバックをとります。これは、コピーが完了していなくてもforループが実行され続けることを意味します。つまり、25,000回のコピー操作をキューに入れただけです。

これを解決する方法はいくつかありますが、最も一般的なのはasyncモジュールを使用する方法です。

var async = require('async'); 
async.forEachOf(origin, function (file, i, callback) { 
    cp(file, dest[i], function(err){ 
     callback(); 
    }); 
}) 

callbackが呼び出されるまで、これがループの次の繰り返しに進みません。あなたはこれで非同期(async)コピーすることができ

+0

ありがとう、私はまた、 '非同期' を試してみました。今度はあなたのコードを試しました: 'console.log(orig.length +" "+ dst.length); async.forEachOf "終了"(ORIG、関数(ファイル、I、コールバック){ CP(ファイル、DST [i]は、関数(ERR){ にconsole.log() コールバック();} ) ; }) ' orig.lengthとdest.lengthは20000を出力しますが、「終了」は7000〜9000回の間に再び印刷されます。それ以降は何もしません:( –

+0

@ OscarJ.Irunええええええええええええええええええええええええええ요の投稿: stackoverflow.com/questions/11293857/fastest-way-to-copy-file-in-node-js – Harangue

+0

私もhttps://github.com/sindresorhus/cp-fileを試しましたが、今度は4000と5000のファイルも提供していますが、あなたが提供したリンクも試しましたが、ファイルの半分をコピーしませんでした:( –

0

var fs = require('fs-extra') 

fs.copy('/tmp/myfile', '/tmp/mynewfile', function (err) { 
    if (err) return console.error(err) 
    console.log("success!") 
}) // copies file 

fs.copy('/tmp/mydir', '/tmp/mynewdir', function (err) { 
    if (err) return console.error(err) 
    console.log('success!') 
}) // copies directory, even if it has subdirectories or file 

情報=>https://www.npmjs.com/package/fs-extra

関連する問題