加入收藏 | 设为首页 | 会员中心 | 我要投稿 常州站长网 (https://www.0519zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

node.js中的fs.realpathSync方法使用说明

发布时间:2016-11-23 17:50:52 所属栏目:Linux 来源:站长网
导读:方法说明: 同步版的 fs.realpath() 。 语法: 复制代码 代码如下: fs.realpathSync(path, [cache]) 由于该方法属于fs模块,使用前需要引入fs模块(var fs= require(“fs”) ) 接收参数: pathnbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nb

方法说明:

同步版的 fs.realpath() 。

语法:

复制代码 代码如下:
fs.realpathSync(path, [cache])

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

接收参数:

pathnbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; 路径

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

例子:

复制代码 代码如下:
var fs = require('fs');
nbsp;
// 点号表示当前文件所在路径
var str = fs.realpathSync('.');
console.log(str);

源码:

复制代码 代码如下:
fs.realpathSync = function realpathSync(p, cache) {
nbsp; // make p is absolute
nbsp; p = pathModule.resolve(p);
nbsp; if (cache Object.prototype.hasOwnProperty.call(cache, p)) {
nbsp;nbsp;nbsp; return cache[p];
nbsp; }
nbsp; var original = p,
nbsp;nbsp;nbsp;nbsp;nbsp; seenLinks = {},
nbsp;nbsp;nbsp;nbsp;nbsp; knownHard = {};
nbsp; // current character position in p
nbsp; var pos;
nbsp; // the partial path so far, including a trailing slash if any
nbsp; var current;
nbsp; // the partial path without a trailing slash (except when pointing at a root)
nbsp; var base;
nbsp; // the partial path scanned in the previous round, with slash
nbsp; var previous;
nbsp; start();
nbsp; function start() {
nbsp;nbsp;nbsp; // Skip over roots
nbsp;nbsp;nbsp; var m = splitRootRe.exec(p);
nbsp;nbsp;nbsp; pos = m[0].length;
nbsp;nbsp;nbsp; current = m[0];
nbsp;nbsp;nbsp; base = m[0];
nbsp;nbsp;nbsp; previous = '';
nbsp;nbsp;nbsp; // On windows, check that the root exists. On unix there is no need.
nbsp;nbsp;nbsp; if (isWindows !knownHard[base]) {
nbsp;nbsp;nbsp;nbsp;nbsp; fs.lstatSync(base);
nbsp;nbsp;nbsp;nbsp;nbsp; knownHard[base] = true;
nbsp;nbsp;nbsp; }
nbsp; }
nbsp; // walk down the path, swapping out linked pathparts for their real
nbsp; // values
nbsp; // NB: p.length changes.
nbsp; while (pos lt; p.length) {
nbsp;nbsp;nbsp; // find the next part
nbsp;nbsp;nbsp; nextPartRe.lastIndex = pos;
nbsp;nbsp;nbsp; var result = nextPartRe.exec(p);
nbsp;nbsp;nbsp; previous = current;
nbsp;nbsp;nbsp; current += result[0];
nbsp;nbsp;nbsp; base = previous + result[1];
nbsp;nbsp;nbsp; pos = nextPartRe.lastIndex;
nbsp;nbsp;nbsp; // continue if not a symlink
nbsp;nbsp;nbsp; if (knownHard[base] || (cache cache[base] === base)) {
nbsp;nbsp;nbsp;nbsp;nbsp; continue;
nbsp;nbsp;nbsp; }
nbsp;nbsp;nbsp; var resolvedLink;
nbsp;nbsp;nbsp; if (cache Object.prototype.hasOwnProperty.call(cache, base)) {
nbsp;nbsp;nbsp;nbsp;nbsp; // some known symbolic link. no need to stat again.
nbsp;nbsp;nbsp;nbsp;nbsp; resolvedLink = cache[base];
nbsp;nbsp;nbsp; } else {
nbsp;nbsp;nbsp;nbsp;nbsp; var stat = fs.lstatSync(base);
nbsp;nbsp;nbsp;nbsp;nbsp; if (!stat.isSymbolicLink()) {
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; knownHard[base] = true;
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; if (cache) cache[base] = base;
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; continue;
nbsp;nbsp;nbsp;nbsp;nbsp; }
nbsp;nbsp;nbsp;nbsp;nbsp; // read the link if it wasn't read before
nbsp;nbsp;nbsp;nbsp;nbsp; // dev/ino always return 0 on windows, so skip the check.
nbsp;nbsp;nbsp;nbsp;nbsp; var linkTarget = null;
nbsp;nbsp;nbsp;nbsp;nbsp; if (!isWindows) {
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; var id = stat.dev.toString(32) + ':' + stat.ino.toString(32);
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; if (seenLinks.hasOwnProperty(id)) {
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; linkTarget = seenLinks[id];
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; }
nbsp;nbsp;nbsp;nbsp;nbsp; }
nbsp;nbsp;nbsp;nbsp;nbsp; if (util.isNull(linkTarget)) {
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; fs.statSync(base);
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; linkTarget = fs.readlinkSync(base);
nbsp;nbsp;nbsp;nbsp;nbsp; }
nbsp;nbsp;nbsp;nbsp;nbsp; resolvedLink = pathModule.resolve(previous, linkTarget);
nbsp;nbsp;nbsp;nbsp;nbsp; // track this, if given a cache.
nbsp;nbsp;nbsp;nbsp;nbsp; if (cache) cache[base] = resolvedLink;
nbsp;nbsp;nbsp;nbsp;nbsp; if (!isWindows) seenLinks[id] = linkTarget;
nbsp;nbsp;nbsp; }
nbsp;nbsp;nbsp; // resolve the link, then start over
nbsp;nbsp;nbsp; p = pathModule.resolve(resolvedLink, p.slice(pos));
nbsp;nbsp;nbsp; start();
nbsp; }
nbsp; if (cache) cache[original] = p;
nbsp; return p;
};

(编辑:常州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读