【发布时间】:2013-11-17 15:47:47
【问题描述】:
是否有任何 API 可以从绝对文件路径中检索文件名?
例如"foo.txt" 来自"/var/www/foo.txt"
我知道它适用于字符串操作,例如fullpath.replace(/.+\//, '')
但我想知道有没有更“正式”的方式,比如java中的file.getName(),可以做到。
NodeJS 从绝对路径获取文件名?
【问题讨论】:
是否有任何 API 可以从绝对文件路径中检索文件名?
例如"foo.txt" 来自"/var/www/foo.txt"
我知道它适用于字符串操作,例如fullpath.replace(/.+\//, '')
但我想知道有没有更“正式”的方式,比如java中的file.getName(),可以做到。
NodeJS 从绝对路径获取文件名?
【问题讨论】:
使用path模块的basename方法:
path.basename('/foo/bar/baz/asdf/quux.html')
// returns
'quux.html'
Here 是上述示例的文档。
【讨论】:
path.basename(fpath, path.extname(fpath))
获取文件名的文件名部分,使用basename方法:
var path = require("path");
var fileName = "C:\\Python27\\ArcGIS10.2\\python.exe";
var file = path.basename(fileName);
console.log(file); // 'python.exe'
如果你想要不带扩展名的文件名,可以将扩展变量(包含扩展名)传递给 basename 方法,告诉 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'
【讨论】:
path.parse(fileName).name
var path = require("path");
var filepath = "C:\\Python27\\ArcGIS10.2\\python.exe";
var name = path.parse(filepath).name;
// returns
'python'
以上代码返回不带扩展名的文件名,如果需要带扩展名的文件名使用
var path = require("path");
var filepath = "C:\\Python27\\ArcGIS10.2\\python.exe";
var name = path.basename(filepath);
// returns
'python.exe'
【讨论】:
对于那些有兴趣从文件名中删除扩展名的人,您可以使用 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 从任何文件传递给服务,以便动态检索文件名
下面,我使用 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();
【讨论】: