如何确定文件是否在Node.js的目录中?

时间:2011-05-04 18:56:41

标签: javascript file-io node.js

鉴于两条绝对路径或相对路径AB,我想知道B是否在“目录A内” - 而不仅仅是目录本身,但可能在子目录中。我想在没有大量fs.readdir电话的情况下这样做。

例如,如果A/B/foo/bar/baz,则BA范围内应该非常明显;递归readdir方法效率极低。

一个明显的想法是将两个路径转换为绝对形式,然后检查B的绝对路径的字符串形式是否以A的字符串形式开头。但是,有两个问题:

  1. 如何将相对路径转换为绝对路径?
  2. 符号链接怎么样?
  3. 我会接受调用Linux实用程序的答案(除了rm -rf ... 技术上可用于解决问题)或第三方节点库。< / p>

2 个答案:

答案 0 :(得分:8)

var fs = require('fs');

var a = fs.realpathSync('/home/mak/www'); // /var/www
var b = fs.realpathSync('/var/www/test/index.html');

var b_in_a = b.indexOf(a) == 0;

var a_is_dir = fs.statSync(a).isDirectory();

fs.*Sync也有异步版本,请参阅fs module

如果路径不存在,

fs.realpathSyncfs.statSync将抛出。

答案 1 :(得分:0)

我建议:

function isWithin(outer, inner) {
  const rel = path.relative(outer, inner);
  return !rel.startsWith("../") && rel !== '..';
}