找到所需文件后,如何立即停止递归搜索目录?
Posted
技术标签:
【中文标题】找到所需文件后,如何立即停止递归搜索目录?【英文标题】:How can I immediately break from searching through directory recursively once desired file is found? 【发布时间】:2019-12-21 20:22:06 【问题描述】:我在目录结构中递归搜索具有特定名称的文件。我想在找到该文件的第一个实例后立即中断。我怎样才能做到这一点?目前,即使在找到我要查找的文件的实例后,它仍在继续解析其余文件。
async function walkDir(dir: string, callback: Function)
for (const f of await fs.readdir(dir))
const dirPath = path.join(dir, f);
if ((await fs.stat(dirPath)).isDirectory())
walkDir(dirPath, callback);
else if (callback(path.join(dir, f)))
return;
let foundFile = false;
await walkDir(startDir, function (f: string)
console.log(f);
if (path.basename(f) === 'manifest.xml')
foundFile = true;
return;
);
【问题讨论】:
【参考方案1】:最简单的选择可能是从回调中返回 true
/false
,如果找到值,则从 walkDir
返回。
async function walkDir(dir: string, callback: (path: string) => boolean): Promise<boolean>
for (const f of await fs.readdir(dir))
const dirPath = path.join(dir, f);
if ((await fs.stat(dirPath)).isDirectory())
if (await walkDir(dirPath, callback))
return true
else if (callback(path.join(dir, f)))
return true;
return false;
var args= dir: "" ;
(async function ()
let foundFile = false;
await walkDir(args.dir, function (f: string)
console.log(f);
if (path.basename(f) === 'manifest.xml')
foundFile = true;
return true;
return false;
);
)();
Play
这还可以简化对示例代码中用例的调用:
let foundFile = await walkDir(args.dir, f => path.basename(f) === 'manifest.xml');
【讨论】:
以上是关于找到所需文件后,如何立即停止递归搜索目录?的主要内容,如果未能解决你的问题,请参考以下文章