LINUX C как преобразовать два полных пути в относительный путь (обновленный) [дубликат]

4
задан alk 15 March 2015 в 11:50
поделиться

3 ответа

Я ответил на аналогичный вопрос: Разрешение относительного пути без ссылки на текущий каталог в Windows .

Для этого нет стандартной функции. Для этой цели существует функция в vi-like-emac. Быстрая проверка apropos relative показывает мне несколько других программ, которые, вероятно, реализуют это: revpath , например).

Это может быть сделано как манипуляция строкой (нет необходимости вычислять рабочие каталоги):

  • начинаем с поиска самого длинного общего префикса, который заканчивается разделителем путей.
  • , если нет общего префикса, вы сделали
  • разделите общий префикс (копия ...) текущей и целевой строк
  • замените каждое имя-каталога в текущей строке на «..»
  • add что (с разделителем пути) перед целевой строкой
  • возвращает эту комбинированную строку

« сделано » во второй шаг предполагает, что вы хотите использовать относительный путь для сокращения результата. С другой стороны, вы можете использовать относительный путь, независимо от длины. В этом случае просто пропустите шаг (результат будет длиннее, но relative ).

5
ответ дан Community 3 September 2018 в 17:16
поделиться

Найдите самый длинный общий путь (в данном случае, /a/path/to) и удалите его из обоих абсолютных путей. Это даст:

  • /a
  • /somewhere/else

Теперь замените каждый компонент пути в исходном пути на ../ и добавьте результат к пути назначения. Если вы хотите перейти из каталога else в каталог a, это даст вам:

../../a

Если вы хотите пойти другим путем, вы должны иметь:

../somewhere/else
5
ответ дан Dylan House 3 September 2018 в 17:16
поделиться

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

1) /a/path/to/a

И

2) /a/path/to/a/new/one

Очевидный путь от (1) до (2) есть new/one, но ../../../a/path/to/a/new/one также верен. Когда вы пишете алгоритм для ходьбы в своем дереве, вы должны знать об этом

3
ответ дан mcleod_ideafix 3 September 2018 в 17:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: