7

在我的 node.js 应用程序中,我有可以传递的函数

操作系统风格的路径,例如 c:\my\docs\mydoc.doc (或 /usr/docs/mydoc.doc 或任何本地文件)

文件 URL,例如 file://c:/my/docs/mydoc.doc (我不确定 '\'s in 的有效性??)

无论哪种方式,我都需要检查它们是否引用特定位置,该位置将始终作为本地操作系统样式路径存在,例如 c:\mydata\directory\ 或 /usr/mydata/directory

显然,对于操作系统风格的路径,我可以将它们作为字符串进行比较——它们应该总是相同的(它们是用路径创建的)但是 FILE:// URLS 不一定使用 path.sep,所以不会“字符串匹配” “?

关于处理这个问题的最佳方法的任何建议(我个人很想用一个或多个斜线来打破一切,然后检查每一块??

4

2 回答 2

7

我将对此发表我自己的看法 - 因为它来自我从 Facebook 上的某个人那里得到的建议(不 - 真的!)它使用路径的方式可能不是为了 - 例如我不是确定这是正确的“解决方案” - 我不确定我没有利用路径。

Facebook 的提示是 path 实际上只是一个用于处理带有“/”和“\”分隔符的字符串的实用程序——它忽略了其他所有内容——根本不关心里面有什么。

在此基础上,我们可以使用

path.normalize(ourpath)

这会将所有分隔符转换为本地操作系统首选的分隔符(path.sep

这意味着它们将匹配我的操作系统风格的目录(这也是用路径制作的),所以我可以比较它们 - 而无需手动删除斜线......

例如

file://awkward/use/of\\slashes\in/this/path

file:\awkward\use\of\slashes\in\this\path (Windows)

或者

file:/awkward/use/of/slashes/in/this/path (everywhere else)

删除file://之前(或file:+path.sep之后)=本地操作系统风格的路径!?

于 2013-08-20T20:49:53.883 回答
0

只需对字符串进行一些操作并检查以确保在纠正差异后它们是相同的:

var path = require('path');
var pathname = "\\usr\\home\\newbeb01\\Desktop\\testinput.txt";
var pathname2 = "file://usr/home/newbeb01/Desktop/testinput.txt"

if(PreparePathNameForComparing(pathname) == PreparePathNameForComparing(pathname2))
{   console.log("Same path");   }
else
{   console.log("Not the same path");   }

function PreparePathNameForComparing(pathname)
{
    var returnString = pathname;
    //try to find the file uri prefix, if there strip it off
    if(pathname.search("file://") != -1 || pathname.search("FILE://") != -1)
    {   returnString = pathname.substring(6, pathname.length);  }

    //now make all slashes the same
    if(path.sep === '\\')    //replace all '/' with '\\'
    {   returnString = returnString.replace(/\//g, '\\');   }
    else    //replace all '\\' with '/'
    {   returnString = returnString.replace(/\\/g, '/');    }

    return returnString;
}

我检查了 URI 路径名称指示符“file://”是否存在,如果存在,我将其从比较字符串中删除。然后我根据路径分隔符归一化节点路径模块会给我。这样它应该可以在 Linux 或 Windows 环境中工作。

于 2013-08-20T19:33:41.683 回答