0

少なくとも私にとっては、結果は予想外です。ディレクトリを検索してすべてのファイルとサブフォルダを取得しようとしていますが、サブディレクトリのサブディレクトリの操作に問題があります。関数自体は、特定のフォルダー内のすべてのフォルダーとすべてのファイルのすべてのコンテンツを検索し、フォルダー内のものの1つがフォルダーである場合にそれ自体を呼び出すように設計されています。

ただし、終了することはなく、同じフォルダをそれ自体にフィードし続け、何も実行せず、最終的にはクラッシュします。

var fs = require('fs');

var array = fs.readdirSync(__dirname);
function getAllSub(array){
for (i = 0; i < array.length; i++){
    if (array[i].indexOf(".") == (-1))
        {                     
            array = array.concat(array[i] + "/" + fs.readdirSync(__dirname + "/" +    array[i]));
        }
    if (array[i].indexOf("/") != (-1)){
        var foldcon = array[i].substr(array[i].indexOf("/") + 1);
        var folder = array[i].substr(0, array[i].indexOf("/"));
        foldcon = foldcon.split(",");
        for (n = 0; n < foldcon.length; n++){
            foldcon[n] = folder + "/" + foldcon[n]
            if (foldcon[n].indexOf(".") == (-1)){ 
                console.log([foldcon[n]]);
                foldcon[n] = getAllSub([foldcon[n]]);          

            }
        }
        array.splice(i, 1, foldcon);

    }

}


return array;
}
array = getAllSub(array);
console.log(array);
4

1 に答える 1

2

コードにいくつかの問題があります。呼び出しを使用してfs.statファイルに関する情報を取得し、それらがディレクトリまたはファイルであるかどうかを判断する必要があります。パス自体の解析は実際にエラーが発生しやすいものです。また、readdirファイルへのフルパスではなく、ディレクトリ内のファイルの名前を返すだけです。最後に、これを行っている間に node.js スレッドをロックしないように、readdir の非同期バージョンを使用することをお勧めします。

開始パスからすべてのフォルダーとファイルを取得するためのサンプル コードを次に示します。

var parseDirectory = function (startPath) {
  fs.readdir(startPath, function (err, files) {
    for(var i = 0, len = files.length; i < len; i++) {
      checkFile(startPath + '/' + files[i]);
    }
  });
};

var checkFile = function (path) {
  fs.stat(path, function (err, stats) {
    if (stats.isFile()) {
      console.log(path + ' is a file.');
    }
    else if (stats.isDirectory()) {
      console.log(path + ' is a directory.');
      parseDirectory(path);
    }
  });
};


parseDirectory(__dirname + '/../public');
于 2012-04-29T04:36:32.007 に答える