我正在寻找node.js中的一个函数来向上搜索文件系统,以检查给定文件是否存在,如果存在,则获取其内容。
例如,如果我有以下文件夹结构:
* root
|--dir1
| |-dir2
| |-dir3
|...
如果我在dir3中,我想搜索一个可以在任何文件夹中的给定文件,如果我上..
但不在他们的子文件夹中。所以我想要的是一个简单的方法来检查当前文件夹中的文件,如果它不存在上去一个文件夹并在那里搜索,直到你找到该文件或你在根文件夹中。
答案 0 :(得分:0)
我觉得自己写起来很容易。您可以使用fs.readdir
或fs.readdirSync
。
同步解决方案可能如下所示:(未经测试)
var fs = require('fs');
var process = require('process');
var path = require('path');
function findFile(filename, startdir) {
if(!startdir) statdir = process.cwd();
while(true) {
var list = fs.readdirSync(startdir);
if((index = list.indexOf(filename)) != -1)
// found
return fs.readFileSync(path.join([startdir, filename]));
else if(startdir == '/')
// root dir, file not found
return null;
else
startdir = path.normalize(path.join([startdir, '..']));
}
}
答案 1 :(得分:0)
还有一个NPM软件包-fileUp就是这样做的。
自述文件:
const path = require('path');
const findUp = require('find-up');
(async () => {
console.log(await findUp('unicorn.png'));
//=> '/Users/sindresorhus/unicorn.png'
console.log(await findUp(['rainbow.png', 'unicorn.png']));
//=> '/Users/sindresorhus/unicorn.png'
console.log(await findUp(async directory => {
const hasUnicorns = await findUp.exists(path.join(directory, 'unicorn.png'));
return hasUnicorns && directory;
}, {type: 'directory'}));
//=> '/Users/sindresorhus'
})();