Как найти, является ли данный путь абсолютным / относительным и преобразовать его в абсолютный для манипулирования файлами? - PullRequest
4 голосов
/ 09 марта 2010

Я пишу небольшой скрипт для Windows в javascript / jscript для поиска соответствия регулярному выражению со строкой, которую я получил, манипулируя файлом.

Путь к файлу может быть указан как относительный или абсолютный. Как найти, является ли данный путь абсолютным / относительным и преобразовать его в абсолютный для манипулирования файлами?

Ответы [ 2 ]

5 голосов
/ 09 марта 2010

Как определить, является ли данный путь абсолютным / относительным ...

Из статьи MSDN Именование файлов, путей и пространств имен :

Имя файла относится к текущему каталогу, если оно не начинается с одного из следующих:

  • UNC-имя любого формата, которое всегда начинается с двух символов обратной косой черты ("\\"). Для получения дополнительной информации см. Следующий раздел.
  • Обозначение диска с обратной косой чертой, например "C: \" или "d: \".
  • Отдельная обратная косая черта, например, "\ directory" или "\ file.txt". Это также называется абсолютный путь .

Итак, строго говоря, абсолютный путь - это тот, который начинается с одного обратного слеша (\). Вы можете проверить это условие следующим образом:

if (/^\\(?!\\)/.test(path)) {
  // path is absolute
}
else {
  // path isn't absolute
}

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

function pathIsAbsolute(path)
{
  if ( /^[A-Za-z]:\\/.test(path) ) return true;
  if ( path.indexOf("\\") == 0 )   return true;
  return false;
}

или (с использованием одного регулярного выражения и чуть менее читаемого):

function pathIsAbsolute(path)
{
  return /^(?:[A-Za-z]:)?\\/.test(path);
}
<Ч />

... и преобразовать его в абсолютное значение для манипулирования файлами?

Используйте метод FileSystemObject.GetAbsolutePathName:

var fso = new ActiveXObject("Scripting.FileSystemObject");
var full_path = fso.GetAbsolutePathName(path);
1 голос
/ 09 марта 2010

Чтобы проверить, является ли путь относительным или абсолютным, ищите начальный /. Если его нет, вам нужно объединить путь к базовому пути. В некоторых средах программирования есть «текущий рабочий каталог», но Javascript, который живет в браузере, отсутствует, поэтому вам просто нужно выбрать базовый путь и придерживаться его.

function full_path(my_path) {
    var base_path = "/home/Sriram/htdocs/media";
    var path_regex = /^\/.*$/;
    if(path_regex.test(my_path)) {
        return my_path;
    } else {
        return base_path + my_path;
    }
}

Пути могут содержать символы новой строки, которые не будут соответствовать регулярному выражению javascript ., поэтому вы можете разработать более сложное регулярное выражение, чтобы обеспечить правильную работу всех путей. Тем не менее, я считаю, что это выходит за рамки этого ответа и моих знаний. : -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...