0

那么结果至少对我来说是出乎意料的。我正在尝试搜索目录并获取所有文件和子文件夹,但是在处理子目录的子目录时遇到了一些问题。该函数本身旨在查找所有文件夹的所有内容以及给定文件夹中的所有文件,并在文件夹中的其中一个事物是文件夹时调用自身。

但是,它永远不会完成,它一直将同一个文件夹输入到自身中,并且从不对其进行任何操作,最终只是崩溃了。

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只返回目录中文件的名称,而不是文件的完整路径。最后,我建议您使用 readdir 的异步版本,这样您在执行此操作时就不会锁定 node.js 线程。

下面是一些从起始路径获取所有文件夹和文件的示例代码:

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 回答