2014-06-01 4 views
5

Я потратил немало времени на поиски встроенной функции MATLAB для преобразования относительных путей к абсолютным путям файлов (переносимо).Функция для преобразования относительных путей в абсолютные пути?

Есть ли один?

Я ищу что-то предпочтительно «встроенное» (то есть доступное где-то в дистрибутиве MATLAB, включая один из его наборов инструментов). Даже функция «package-private» была бы приемлемой, если бы я мог изучить исходный код функции. Вторая лучшая была бы сторонней функцией, если она поставляется с достойным набором тестов. Я не ищет функцию, написанную в ответ на этот вопрос.

Отсутствуют какие-либо из вышеуказанного, даже функции теста (переносимо) является ли абсолютный путь или не будет делать (при тех же условиях, что и раньше: либо «встроенной» функции или сторонняя функция с набором тестов).


Трудность реализации такой функции не писать саму функцию, а писать достаточно полный набор тестов для него (и, конечно же, убедившись в том, что функция проходит все тесты !).

ответ

6

fullfile(pwd, relative_path) преобразует относительную абсолютную траекторию.

+2

Извините, но такие функции преобразования должны всегда быть идемпотентными; то есть 'rel2abs (rel2abs (path))' должен выдавать тот же результат, что и 'rel2abs (path)'. Кроме того, я явно указал, что мне не нужны функции, написанные в ответ на этот вопрос (т. Е. Непроверенные функции). Вы отвечаете очень много. – kjo

+3

@kjo 'fullfile' является встроенной функцией: http://www.mathworks.com/help/matlab/ref/fullfile.html. –

+0

@ kjo нет никакой встроенной функции, которая делает это. Для функции idempotent используйте Java.io.File.getAbsolutePath() – Daniel

0

Смотрите, если which отвечает вашим требованиям:

full_path = which(relative_path); 
3

Вы можете проверить, если путь является абсолютным использованием

javaFileObj = java.io.File(pathToBeTested); 
javaFileObj.isAbsolute() 

В отличие от char(javaFileObj.getCanonicalPath()), который на самом деле иногда неправильно возвращает несуществующий путь относительно C: \ Windows \ System32, isAbsolute() кажется, работают правильно (проверено на Win7, MATLAB 2015b) Поэтому код для построения абсолютного пути будет выглядеть

function F = rel2abs(F) 
if ~java.io.File(F).isAbsolute 
    F = fullfile(pwd,F); 
end 

Эта функция имеет то преимущество, что она идемпотентна.

Смежные вопросы