web-dev-qa-db-ja.com

nodejsは絶対パスからファイル名を取得しますか?

絶対ファイルパスからファイル名を取得できるAPIはありますか。

例えば"foo.txt"から"/var/www/foo.txt"

私はそれがfullpath.replace(/.+\//, '')のような文字列操作で動作することを知っていますが、私はJavaのfile.getName()のようにもっと '形式的な'方法がそれを行うことができるか知りたいです。

NodeJSは絶対パスからファイル名を取得しますか?

215
fxp

basenameモジュールのpathメソッドを使用します。

path.basename('/foo/bar/baz/asdf/quux.html')
// returns
'quux.html'

ここで は上記の例の抜粋です。

425
Victor Stanciu

ファイル名のファイル名部分を取得するには、basenameメソッドが使用されます。

var path = require("path");
var fileName = "C:\\Python27\\ArcGIS10.2\\python.exe";
var file = path.basename(fileName);

console.log(file); // 'python.exe'

拡張子なしのファイル名が必要な場合は、拡張子なしの名前のみを返すようにNodeに指示する拡張子変数(拡張子名を含む)を渡します。

var path = require("path");
var fileName = "C:\\Python27\\ArcGIS10.2\\python.exe";
var extension = path.extname(fileName);
var file = path.basename(fileName,extension);

console.log(file); // 'python'
16
Rubin bhandari

あなたの質問の例で暗示されているように、パスセパレータが/であることをすでに知っているならば(すなわちあなたが特定のプラットフォーム/環境のために書いている)、あなたはそれを単純に保ちそしてセパレータでストリングを分割することができる

'/foo/bar/baz/asdf/quux.html'.split('/').pop()

それは正規表現で置き換えるよりも 速い (そしてよりきれいなimo)でしょう。

繰り返しますが、これは特定の環境用に書いている場合にのみ行います。そうでない場合はパスが驚くほど複雑になるため、pathモジュールを使用します。例えば、Windowsは多くの場合/をサポートしますが、例えば - ではサポートしません 。共有ネットワークフォルダなどに使用される\\?\?スタイルのプレフィックス。 Windowsでは、遅かれ早かれ上記の方法は失敗する運命にあります。

3
leo

ファイル名から拡張子を削除したい人は、 https://nodejs.org/api/path.html#path_path_basename_path_ext を使用してください。

path.basename('/foo/bar/baz/asdf/quux.html', '.html');
1
Tigertron

NodeJSでは、__ filename.split(/\| //)。pop()は、OSプラットフォームの絶対ファイルパスからファイル名のみを返します。この正規表現のアプローチによって正規表現のスキルを思い出すことができるのに、なぜAPIを記憶/インポートする必要があるのか​​。

0
Visv M

そのため、Nodejsには、実行中の現在のファイルを保持する'__fileName'というデフォルトのグローバル変数が付属しています。

以下では、fileName文字列を利用し、それをpath.sepに基づいて分割します。注意path.sepは、posixファイルの区切り文字とwindowsファイルの区切り文字に関する問題( '/'と '\'に関する問題)を回避します。とてもきれいです。部分文字列を取得し、最後に区切られた名前のみを取得し、それを実際の長さの3で減算すると、それ自体がわかります。

このようなサービスを書くことができます(これはTypeScriptで書かれていますが、jsで書くこともできます)。

export class AppLoggingConstants {

    constructor(){

    }
      // Here make sure the fileName param is actually '__fileName'
    getDefaultMedata(fileName: string, methodName: string) {
        const appName = APP_NAME;
        const actualFileName = fileName.substring(fileName.lastIndexOf(path.sep)+1, fileName.length - 3);
        //const actualFileName = fileName;
     return appName+ ' -- '+actualFileName;
    }


}

export const AppLoggingConstantsInstance = new AppLoggingConstants();
0
Joey587
var path = require("path");
var filepath = "C:\\Python27\\ArcGIS10.2\\python.exe";
var name = path.parse(filepath).name;

拡張子付きの名前の場合は、拡張子なしでファイルの名前を指定します。

var path = require("path");
var filepath = "C:\\Python27\\ArcGIS10.2\\python.exe";
var name = path.basename(filepath);
0
Kevin Muchwat