2017-06-20 26 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") 

三個問題的結果。

1.stuck
爲了執行在serveral的分鐘節點控制檯以上的NodeJS,光標停在那裏,沒有節點PROMT chracter >顯示器,只是靜態遊標。
靜態遊標是否意味着nodejs程序被卡住了?

2.完整性
對於列出的所有文件,它們都沒有在光標停在那裏之前是否爲真或假?

3.repeatedly
在附件中,許多相同的文件名上市,如BasicLatin.jsCombDiacritMarks.js,相同的文件反覆上市?

enter image description here

要解決該聲明console.log('-' + file)console.log(directoryName + path.sep + 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。運行顯示完整路徑的程序並檢查它們是否真的重複。
相關問題