絶対ファイルパスからファイル名を取得できるAPIはありますか。
例えば"foo.txt"
から"/var/www/foo.txt"
私はそれがfullpath.replace(/.+\//, '')
のような文字列操作で動作することを知っていますが、私はJavaのfile.getName()
のようにもっと '形式的な'方法がそれを行うことができるか知りたいです。
NodeJSは絶対パスからファイル名を取得しますか?
basename
モジュールのpath
メソッドを使用します。
path.basename('/foo/bar/baz/asdf/quux.html')
// returns
'quux.html'
ここで は上記の例の抜粋です。
ファイル名のファイル名部分を取得するには、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'
あなたの質問の例で暗示されているように、パスセパレータが/
であることをすでに知っているならば(すなわちあなたが特定のプラットフォーム/環境のために書いている)、あなたはそれを単純に保ちそしてセパレータでストリングを分割することができる
'/foo/bar/baz/asdf/quux.html'.split('/').pop()
それは正規表現で置き換えるよりも 速い (そしてよりきれいなimo)でしょう。
繰り返しますが、これは特定の環境用に書いている場合にのみ行います。そうでない場合はパスが驚くほど複雑になるため、path
モジュールを使用します。例えば、Windowsは多くの場合/
をサポートしますが、例えば - ではサポートしません 。共有ネットワークフォルダなどに使用される\\?\?
スタイルのプレフィックス。 Windowsでは、遅かれ早かれ上記の方法は失敗する運命にあります。
ファイル名から拡張子を削除したい人は、 https://nodejs.org/api/path.html#path_path_basename_path_ext を使用してください。
path.basename('/foo/bar/baz/asdf/quux.html', '.html');
NodeJSでは、__ filename.split(/\| //)。pop()は、OSプラットフォームの絶対ファイルパスからファイル名のみを返します。この正規表現のアプローチによって正規表現のスキルを思い出すことができるのに、なぜAPIを記憶/インポートする必要があるのか。
そのため、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();
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);