在Javascript中获取文件名的目录

时间:2009-05-04 02:10:24

标签: javascript

如何获取文件目录?

例如,我传入一个字符串

C:\Program Files\nant\bin\nant.exe

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

C:\Program Files\nant\bin

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

编辑:我在Windows上运行

9 个答案:

答案 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
  1. 将字符串拆分为由" /"分隔的数组
  2. 删除数组的最后一个元素(可以是文件名+扩展名)
  3. 加入阵列w /" /"生成目录路径
  4. 这样

    "/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);