node.js中的fs.realpathSync方法使用说明_Javascript教程-查字典教程网
node.js中的fs.realpathSync方法使用说明
node.js中的fs.realpathSync方法使用说明
发布时间:2016-12-30 来源:查字典编辑
摘要:方法说明:同步版的fs.realpath()。语法:复制代码代码如下:fs.realpathSync(path,[cache])由于该方法属...

方法说明:

同步版的 fs.realpath() 。

语法:

复制代码 代码如下:

fs.realpathSync(path, [cache])

由于该方法属于fs模块,使用前需要引入fs模块(var fs= require(“fs”) )

接收参数:

path 路径

cache 可选,一个文字的映射路径可用于强制一个特定的路径解决或避免额外的fs.stat需要知道真正的路径对象。

例子:

复制代码 代码如下:

var fs = require('fs');

// 点号表示当前文件所在路径

var str = fs.realpathSync('.');

console.log(str);

源码:

复制代码 代码如下:

fs.realpathSync = function realpathSync(p, cache) {

// make p is absolute

p = pathModule.resolve(p);

if (cache && Object.prototype.hasOwnProperty.call(cache, p)) {

return cache[p];

}

var original = p,

seenLinks = {},

knownHard = {};

// current character position in p

var pos;

// the partial path so far, including a trailing slash if any

var current;

// the partial path without a trailing slash (except when pointing at a root)

var base;

// the partial path scanned in the previous round, with slash

var previous;

start();

function start() {

// Skip over roots

var m = splitRootRe.exec(p);

pos = m[0].length;

current = m[0];

base = m[0];

previous = '';

// On windows, check that the root exists. On unix there is no need.

if (isWindows && !knownHard[base]) {

fs.lstatSync(base);

knownHard[base] = true;

}

}

// walk down the path, swapping out linked pathparts for their real

// values

// NB: p.length changes.

while (pos < p.length) {

// find the next part

nextPartRe.lastIndex = pos;

var result = nextPartRe.exec(p);

previous = current;

current += result[0];

base = previous + result[1];

pos = nextPartRe.lastIndex;

// continue if not a symlink

if (knownHard[base] || (cache && cache[base] === base)) {

continue;

}

var resolvedLink;

if (cache && Object.prototype.hasOwnProperty.call(cache, base)) {

// some known symbolic link. no need to stat again.

resolvedLink = cache[base];

} else {

var stat = fs.lstatSync(base);

if (!stat.isSymbolicLink()) {

knownHard[base] = true;

if (cache) cache[base] = base;

continue;

}

// read the link if it wasn't read before

// dev/ino always return 0 on windows, so skip the check.

var linkTarget = null;

if (!isWindows) {

var id = stat.dev.toString(32) + ':' + stat.ino.toString(32);

if (seenLinks.hasOwnProperty(id)) {

linkTarget = seenLinks[id];

}

}

if (util.isNull(linkTarget)) {

fs.statSync(base);

linkTarget = fs.readlinkSync(base);

}

resolvedLink = pathModule.resolve(previous, linkTarget);

// track this, if given a cache.

if (cache) cache[base] = resolvedLink;

if (!isWindows) seenLinks[id] = linkTarget;

}

// resolve the link, then start over

p = pathModule.resolve(resolvedLink, p.slice(pos));

start();

}

if (cache) cache[original] = p;

return p;

};

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新Javascript教程学习
    热门Javascript教程学习
    编程开发子分类