在Javascript中获取文件名的目录

Gra*_*ton 18 javascript

如何获取文件的目录?

例如,我传入一个字符串

C:\Program Files\nant\bin\nant.exe
Run Code Online (Sandbox Code Playgroud)

我想要一个能让我回归的功能

C:\Program Files\nant\bin
Run Code Online (Sandbox Code Playgroud)

我更喜欢内置函数来完成这项工作,而不是手动拆分字符串并排除最后一个.

编辑:我在Windows上运行

Pha*_*rus 21

我不知道是否有任何内置的功能,但它是非常直接的获得路径.

path = path.substring(0,path.lastIndexOf("\\")+1);
Run Code Online (Sandbox Code Playgroud)

  • 您的解决方案仅适用于Windows.Linux使用'/'代替.最好使用独立于操作系统的解决方案. (10认同)
  • @Nadia 问题是关于 Windows 和路径分隔符可能是他对可移植性最不关心的问题,我们还没有看到代码或知道他用它做什么 (2认同)

W.P*_*rin 14

如果您使用Node.js,path模块非常方便。

path.dirname("/home/workspace/filename.txt") // '/home/workspace/'
Run Code Online (Sandbox Code Playgroud)

  • 我认为你的意思是nodejs,而不是typescript (7认同)

The*_*ver 10

使用:

var dirname = filename.match(/(.*)[\/\\]/)[1]||'';
Run Code Online (Sandbox Code Playgroud)

*基于lastIndexOf('/')或lastIndexOf('\')的答案容易出错,因为path可以是"c:\ aa/bb\cc/dd".
(Matthew Flaschen确实考虑到了这一点,所以我的回答是正则表达式)


Mat*_*hen 9

没有完美的解决方案,因为此功能不是内置的,并且无法获得系统文件分隔符.你可以试试:

path = path.substring(0, Math.max(path.lastIndexOf("/"), path.lastIndexOf("\\"))); 
alert(path);
Run Code Online (Sandbox Code Playgroud)


Kar*_*ani 7

Path模块有一个内置函数

是的,内置模块路径有 dirname() 函数,它可以为您完成这项工作。

const path = require("path");

file_path = "C:\\Program Files\\nant\\bin\\nant.exe" \\windows path
file_path = "C:/Program Files/nant/bin/nant.exe" \\linux path

path.dirname(file_path); \\gets you the folder path based on your OS
Run Code Online (Sandbox Code Playgroud)

我发现你的路径既不兼容 Windows 也不兼容 Linux。不要硬编码路径;相反,从基于您的操作系统的路径中获取引用。

我通常通过使用创建相对路径来解决这种情况path.join(__dirname, "..", "assets", "banner.json");

这给了我一个无论您使用什么操作系统都可以工作的相对路径。