2017-06-20 2 views
1

nodejsで指定したディレクトリにすべてのファイルをリストしたいとします。nodejsを持つディレクトリ内のすべてのファイルを繰り返し表示するために、スタックされた完全性?

var fs = require('fs'); 
var path = require('path'); 

var walk = function(directoryName) { 
    fs.readdir(directoryName, function(e, files) { 
    files.forEach(function(file) { 
     fs.stat(directoryName + path.sep + file, function(e, f) { 
     if (f.isDirectory()) { 
      walk(directoryName + path.sep + file) 
     } else { 
      console.log('-' + file) 
     } 
     }) 
    }) 
    }) 
} 

walk("/home") 

結果に3つの問題があります。

1.stuck
のserveral分でノードコンソール上記nodejsを実行するために、カーソルが停止しないノードPROMTのchracter >ディスプレイ、単に静的カーソル。
staticカーソルnodejsプログラムがスタックしていますか?

2.completeness
すべてのファイルがリストされているかどうかはtrueまたはfalseです。添付ファイルは、そのようなBasicLatin.jsCombDiacritMarks.jsとして記載され、多くの同じファイル名で

3.repeatedly
、同じファイルが繰り返し記載されていますか?

enter image description here

console.log(directoryName + path.sep + file)に声明console.log('-' + file)を修正し、list.jsとして保存し、コマンドnode list.jsで実行し、問題2と問題3を解決するには。
すべてのファイルが一覧表示され、同じファイルは繰り返し表示されません。

nodeを端末に入力し、行ごとにプログラムを実行します。
なぜノードプロンプト文字>は、ノードコンソールで実行するすべてのファイルをリストした後に表示されますか?
プログラムがここで停止しているようですか?

答えて

1

注:これはまだ完全な回答ではありません。さらに詳しい情報が必要ですが、 のコメントは短すぎます。回答は の回答に応じて編集/削除します。

私のUbuntuマシンでコードを実行し、終了コード0でコードを実行しました。コールバックのエラーを処理して完了するようにしなければなりませんでしたが、スタックしませんでした。

'use strict'; 

var fs = require('fs'); 
var path = require('path'); 

var walk = function(directoryName) { 
    fs.readdir(directoryName, function(e, files) { 
    if (!e) { 
     files.forEach(function (file) { 
     fs.stat(directoryName + path.sep + file, function (e, f) { 
      if (!e) { 
      if (f.isDirectory()) { 
       walk(directoryName + path.sep + file) 
      } else { 
       console.log(' - ' + file) 
      } 
      } else { 
      console.log(e); 
      } 
     }) 
     }) 
    } else { 
     console.log(e); 
    } 
    }) 
} 

walk("/home") 

あなたのコードで何かが完全に間違っているようには見えません。ご質問どのようにあなたのコードを実行している

  1. について

  2. /homeよりも小さなディレクトリ階層でテストを実行してください。私はこれがUNIX/Linuxマシンの/ homeだと仮定します。
  3. 上記と同じ。 BasicLatin.jsを使いましょう。完全パスを表示しているプログラムを実行し、完全に重複しているかどうかを確認します。
関連する問題