99

スクリプトが実行されている OS で使用されているパス区切り文字を JavaScript で確認するにはどうすればよいですか?

4

5 に答える 5

195

pathでモジュールを使用するとnode.js、プラットフォーム固有のファイルセパレータが返されます。

path.sep  // on *nix evaluates to a string equal to "/"

編集:以下のSebasのコメントに従って、これを使用するには、jsファイルの先頭にこれを追加する必要があります。

const path = require('path')
于 2013-02-23T00:25:45.910 に答える
24

残念ながら、Windows でも / をパスの区切り記号としていつでも使用できます。

http://bytes.com/forum/thread23123.htmlからの引用:

したがって、状況はかなり簡単に要約できます。

  • DOS 2.0 以降のすべての DOS サービスとすべての Windows API は、スラッシュまたはバックスラッシュを受け入れます。いつももっている。

  • 標準のコマンド シェル (CMD または COMMAND) はいずれもスラッシュを受け入れません。以前の投稿で示した「cd ./tmp」の例でさえ失敗します。

于 2008-09-24T07:26:28.733 に答える
12

正解

はい、すべての OS は CD ../ または CD ..\ または CD .. を受け入れます。しかし、パスバックを読むのはどうでしょうか。' 'それが「Windows」パスであり、\許可されているかどうかをどのように知ることができますか。

明らかな「当たり前!」質問

たとえば、インストール ディレクトリに依存するとどうなるか%PROGRAM_FILES% (x86)\Notepad++。次の例を見てください。

var fs = require('fs');                             // file system module
var targetDir = 'C:\Program Files (x86)\Notepad++'; // target installer dir

// read all files in the directory
fs.readdir(targetDir, function(err, files) {

    if(!err){
        for(var i = 0; i < files.length; ++i){
            var currFile = files[i];

            console.log(currFile); 
            // ex output: 'C:\Program Files (x86)\Notepad++\notepad++.exe'

            // attempt to print the parent directory of currFile
            var fileDir = getDir(currFile);

            console.log(fileDir);  
            // output is empty string, ''...what!?
        }
    }
});

function getDir(filePath){
    if(filePath !== '' && filePath != null){

       // this will fail on Windows, and work on Others
       return filePath.substring(0, filePath.lastIndexOf('/') + 1);
    }
}

どうしたの!?

targetDirインデックス00( indexOf('/')is -1in C:\Program Files\Notepad\Notepad++.exe) の間の部分文字列に設定されているため、空の文字列になります。

ソリューション...

これには、次の投稿のコードが含まれます: Node.js で現在のオペレーティング システムを確認するにはどうすればよいですか?

myGlobals = { isWin: false, isOsX:false, isNix:false };

OS のサーバー側検出。

// this var could likely a global or available to all parts of your app
if(/^win/.test(process.platform))     { myGlobals.isWin=true; }
else if(process.platform === 'darwin'){ myGlobals.isOsX=true; }
else if(process.platform === 'linux') { myGlobals.isNix=true; }

OSのブラウザ側検出

var appVer = navigator.appVersion;
if      (appVer.indexOf("Win")!=-1)   myGlobals.isWin = true;
else if (appVer.indexOf("Mac")!=-1)   myGlobals.isOsX = true;
else if (appVer.indexOf("X11")!=-1)   myGlobals.isNix = true;
else if (appVer.indexOf("Linux")!=-1) myGlobals.isNix = true;

セパレーターを取得するヘルパー関数

function getPathSeparator(){
    if(myGlobals.isWin){
        return '\\';
    }
    else if(myGlobals.isOsx  || myGlobals.isNix){
        return '/';
    }

    // default to *nix system.
    return '/';
}

// modifying our getDir method from above...

親ディレクトリを取得するヘルパー関数 (クロスプラットフォーム)

function getDir(filePath){
    if(filePath !== '' && filePath != null){
       // this will fail on Windows, and work on Others
       return filePath.substring(0, filePath.lastIndexOf(getPathSeparator()) + 1);
    }
}

getDir()探しているものを知るのに十分なほど知的でなければなりません。

ユーザーがコマンドラインなどを介してパスを入力している場合は、両方を非常に滑らかにチェックすることもできます。

// in the body of getDir() ...
var sepIndex = filePath.lastIndexOf('/');
if(sepIndex == -1){
    sepIndex = filePath.lastIndexOf('\\');
}

// include the trailing separator
return filePath.substring(0, sepIndex+1);

モジュールをロードしてこの単純なタスクを実行する場合は、上記のように「path」モジュールと path.sep を使用することもできます。個人的には、すでに利用可能なプロセスからの情報を確認するだけで十分だと思います。

var path = require('path');
var fileSep = path.sep;    // returns '\\' on windows, '/' on *nix

そしてそれはすべての人々です!

于 2016-02-06T20:41:57.080 に答える
-5

「/」を使用するだけで、私の知る限り、すべての OS で動作します。

于 2008-09-24T07:25:46.393 に答える