7

私のnode.jsアプリには、次のいずれかを渡すことができる関数があります

OS スタイルのパス 例 c:\my\docs\mydoc.doc (または /usr/docs/mydoc.doc またはローカルのもの)

ファイル URL 例 file://c:/my/docs/mydoc.doc ('\'s in の有効性についてはわかりません??)

どちらにしても、c:\mydata\directory\ や /usr/mydata/directory などのローカル OS スタイルのパスとして常に存在する特定の場所を参照しているかどうかを確認する必要があります。

明らかに、OS スタイルのパスの場合、それらを文字列として比較することができます - それらは常に同じである必要があります (パスで作成されます)。 "?

これを処理するための最良の方法に関する提案 (個人的には、いずれかの種類の 1 つまたは複数のスラッシュですべてを壊してから、各部分をチェックするように誘惑されますか??

4

2 に答える 2

7

私はこれについて私自身の見解を投稿するつもりです.Facebookの誰かから得た提案から来たので(いいえ-本当に!)、おそらく意図されていない方法でパスを使用しています-たとえば、私はそうではありませんそれが正しい「解決策」であることを確認してください-パスを少し悪用していないかどうかはわかりません。

Facebook のヒントによると、path は実際には "/" と "\" の区切り文字を使用して文字列を処理するための単なるユーティリティであり、それ以外はすべて無視され、そこに何があるかはまったく気にしません。

それに基づいて、使用できます

path.normalize(ourpath)

これにより、すべてのセパレーターがローカル OS の優先されるものに変換されます ( path.sep)

つまり、それらは私のOSスタイルのディレクトリ(これもパスで作成されます)と一致するため、手動でスラッシュを削除する必要なく、それらを比較できます...

例えば

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後) = ローカル OS スタイルのパス!?

于 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 に答える