如何获取文件目录?
例如,我传入一个字符串
C:\Program Files\nant\bin\nant.exe
我想要一个能让我回归的功能
C:\Program Files\nant\bin
我更喜欢内置函数来完成这项工作,而不是手动拆分字符串并排除最后一个字符串。
编辑:我在Windows上运行
答案 0 :(得分:19)
我不知道这是否有任何内置功能,但是很容易找到路径。
path = path.substring(0,path.lastIndexOf("\\")+1);
答案 1 :(得分:9)
使用:
var dirname = filename.match(/(.*)[\/\\]/)[1]||'';
*基于lastIndexOf('/')或lastIndexOf('\')的答案容易出错,因为路径可以是“c:\ aa / bb \ cc / dd”。
(Matthew Flaschen确实考虑到了这一点,所以我的答案是正则表达式替代方案)
答案 2 :(得分:8)
没有完美的解决方案,因为此功能不是内置的,并且无法获得系统文件分隔符。你可以尝试:
path = path.substring(0, Math.max(path.lastIndexOf("/"), path.lastIndexOf("\\")));
alert(path);
答案 3 :(得分:6)
如果您使用typescript
,则path
模块非常方便。
path.dirname("/home/workspace/filename.txt") // '/home/workspace/'
答案 4 :(得分:2)
function getFileDirectory(filePath) {
if (filePath.indexOf("/") == -1) { // windows
return filePath.substring(0, filePath.lastIndexOf('\\'));
}
else { // unix
return filePath.substring(0, filePath.lastIndexOf('/'));
}
}
console.assert(getFileDirectory('C:\\Program Files\\nant\\bin\\nant.exe') === 'C:\\Program Files\\nant\\bin');
console.assert(getFileDirectory('/usr/bin/nant') === '/usr/bin');
答案 5 :(得分:2)
很抱歉让这个备份,但也在寻找一个没有引用变量两次的解决方案。我想出了以下内容:
var filepath = 'C:\\Program Files\\nant\\bin\\nant.exe';
// C:\Program Files\nant\bin\nant.exe
var dirpath = filepath.split('\\').reverse().splice(1).reverse().join('\\');
// C:\Program Files\nant\bin
这是一个通过操纵字符串到数组和返回的一点点,但我认为它足够干净。
答案 6 :(得分:1)
这个?
如果不是addressFile中的程序,则返回addressFile
function(addressFile) {
var pos = addressFile.lastIndexOf("/");
pos = pos != -1 ? pos : addressFile.lastIndexOf("\\");
if (pos > addressFile.lastIndexOf(".")) {
return addressFile;
}
return addressFile.substring(
0,
pos+1
);
}
console.assert(getFileDirectory('C:\\Program Files\\nant\\bin\\nant.exe') === 'C:\\Program Files\\nant\\bin\\');
console.assert(getFileDirectory('/usr/bin/nant') === '/usr/bin/nant/');
console.assert(getFileDirectory('/usr/thisfolderhaveadot.inhere') === '/usr/');
答案 7 :(得分:0)
filepath.split("/").slice(0,-1).join("/"); // get dir of filepath
这样
"/path/to/test.js".split("/").slice(0,-1).join("/") == "/path/to"
答案 8 :(得分:-2)
核心Javascript语言不提供文件/ io功能。但是,如果您在Windows操作系统中工作,则可以使用FileSystemObject(ActiveX / COM)。
注意:不要在Web应用程序的客户端脚本端脚本中使用它,但最好在其他方面,例如Windows脚本主机或Web应用程序的服务器端,您可以更好地控制平台。
This page提供了有关如何执行此操作的良好教程。
这是一个做你想做的粗略的例子:
var fso, targetFilePath,fileObj,folderObj;
fso = new ActiveXObject("Scripting.FileSystemObject");
fileObj = fso.GetFile(targetFilePath);
folderObj=fileObj.ParentFolder;
alert(folderObj.Path);