2017-01-04 16 views
5

私の機能には少し問題があります。私は多くのディレクトリにすべてのファイルを取得したいと思います。現在、パラメータで渡されたファイル内のファイルを取得できます。私はパラメータとして渡されたフォルダ内の各フォルダのhtmlファイルを取得したいと思います。 "test/test/2// .html":ディレクトリ内のすべてのファイルを再帰的に取得するNodejS

を検索したいと思います。
var srcpath2 = path.join('.', 'diapo', result); 
function getDirectories(srcpath2) { 
       return fs.readdirSync(srcpath2).filter(function (file) { 
        return fs.statSync(path.join(srcpath2, file)).isDirectory(); 
       }); 
      } 

結果: [1,2,3]

感謝!

答えて

12

glob npm packageのように見えます。ここではそれを使用する方法の例です:

ファイル階層:

test 
├── one.html 
└── test-nested 
    └── two.html 

JSコード:

表示
var getDirectories = function (src, callback) { 
    glob(src + '/**/*', callback); 
}; 
getDirectories('test', function (err, res) { 
    if (err) { 
    console.log('Error', err); 
    } else { 
    console.log(res); 
    } 
}); 

:あなたはまた、独自のを書くことができます

[ 'test/one.html', 
    'test/test-nested', 
    'test/test-nested/two.html' ] 
+0

super!それは完璧だ !ありがとうございました ! :) nom globそれはとても良いです –

0

以下のようにディレクトリをトラバースするには、次のようなコードを使用します。

var fs = require('fs'); 
function traverseDirectory(dirname, callback) { 
    var directory = []; 
    fs.readdir(dirname, function(err, list) { 
    dirname = fs.realpathSync(dirname); 
    if (err) { 
     return callback(err); 
    } 
    var listlength = list.length; 
    list.forEach(function(file) { 
     file = dirname + '\\' + file; 
     fs.stat(file, function(err, stat) { 
     directory.push(file); 
if (stat && stat.isDirectory()) { 
      traverseDirectory(file, function(err, parsed) { 
    directory = directory.concat(parsed); 
    if (!--listlength) { 
     callback(null, directory); 
    } 
    }); 
} else { 
    if (!--listlength) { 
     callback(null, directory); 
    } 
      } 
     }); 
    }); 
    }); 
} 
traverseDirectory(__dirname, function(err, result) { 
    if (err) { 
    console.log(err); 
    } 
    console.log(result); 
}); 

あなたはここでそれについての詳細を確認することができます:活字体を使用して、指定されたベースフォルダ内のすべてのサブフォルダを取得し、これを思い付いた:http://www.codingdefined.com/2014/09/how-to-navigate-through-directories-in.html

+0

ありがとう!どのようにres.sendで結果を送信するのですか? –

+0

@ coco62関数内で結果を取得したら、それを渡す代わりに渡すことができます。 – CodingDefined

+0

感謝の男!それは良いです –

2

を私はそう電子アプリで似たような、ために必要な

import { readdirSync, statSync, existsSync } from "fs"; 
import * as path from "path"; 

// recursive synchronous "walk" through a folder structure, with the given base path 
getAllSubFolders = (baseFolder, folderList = []) => { 

    let folders:string[] = readdirSync(baseFolder).filter(file => statSync(path.join(baseFolder, file)).isDirectory()); 
    folders.forEach(folder => { 
     folderList.push(path.join(baseFolder,folder)); 
     this.getAllSubFolders(path.join(baseFolder,folder), folderList); 
    }); 
} 
0

ここにあります。すべての良い回答と同様に、理解しにくいです。

const isDirectory = path => statSync(path).isDirectory(); 
const getDirectories = path => 
    readdirSync(path).map(name => join(path, name)).filter(isDirectory); 

const isFile = path => statSync(path).isFile(); 
const getFiles = path => 
    readdirSync(path).map(name => join(path, name)).filter(isFile); 

const getFilesRecursively = (path) => { 
    let dirs = getDirectories(path); 
    let files = dirs 
     .map(dir => getFilesRecursively(dir)) // go through each directory 
     .reduce((a,b) => a.concat(b), []); // map returns a 2d array (array of file arrays) so flatten 
    return files.concat(getFiles(path)); 
}; 
関連する問題