Получить каталог имени файла в Javascript

Как получить каталог файла?

Например, я передаю строку

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

Мне нужна функция, которая возвращает меня

C:\Program Files\nant\bin

Я бы предпочел встроенную функцию, которая выполняет задание, вместо того, чтобы вручную разбить строку и исключить последнюю.

Изменить: я запускаюсь в Windows

Ответ 1

Я не знаю, есть ли какие-либо встроенные функции для этого, но он довольно прямой, чтобы получить путь.

path = path.substring(0,path.lastIndexOf("\\")+1);

Ответ 2

Использование:

var dirname = filename.match(/(.*)[\/\\]/)[1]||'';

* Ответы, основанные на lastIndexOf ('/') или lastIndexOf ('\'), подвержены ошибкам, потому что путь может быть "c:\aa/bb\cc/dd".
(Мэтью Флашэн сделал это во внимание, поэтому мой ответ является альтернативой регулярному выражению)

Ответ 3

Нет идеального решения, потому что эта функциональность не встроена, и нет способа получить системный разделитель файлов. Вы можете попробовать:

path = path.substring(0, Math.max(path.lastIndexOf("/"), path.lastIndexOf("\\"))); 
alert(path);

Ответ 4

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

Извините, что вернул это резервное копирование, но также искал решение без ссылки на переменную дважды. Я придумал следующее:

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

И это?

Если это не программа в addressFile, возвращайте адресFile

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

Основной язык Javascript не предоставляет функции file/io. Однако, если вы работаете в ОС Windows, вы можете использовать FileSystemObject (ActiveX/COM).

Примечание. Не используйте это в клиентском script -side script веб-приложения, хотя это лучше всего в других областях, например, в Windows script, или на стороне сервера веб-приложения, где у вас больше контроля над платформой.

Эта страница дает хороший учебник о том, как это сделать.

Вот пример, который вы хотите сделать:

   var fso, targetFilePath,fileObj,folderObj;

   fso = new ActiveXObject("Scripting.FileSystemObject");

   fileObj = fso.GetFile(targetFilePath);

   folderObj=fileObj.ParentFolder;

   alert(folderObj.Path);