Лучший способ для этого - объединить fileparts
с mfilename('fullpath')
. (Все примеры предполагают, исполняющий м-файл, содержащий эти заявления живет в /home/suever/code/stackoverflow.m
)
mfiledir = fileparts(mfilename('fullpath'));
/home/suever/code
Затем вы можете использовать fullfile
построить любые пути, нужно от этого. Теперь, если у вас есть файл (data.mat
), хранящийся в том же каталоге:
filename = fullfile(mfiledir, 'data.mat');
/home/suever/code/data.mat
Of если файл на самом деле в родительском каталоге.
filename = fullfile(mfiledir, '..', 'data.mat');
/home/suever/data.mat
Если вы хотите только родительский каталог, что м-файл, вы можете применить fileparts
дважды, и только держать второй выход.
[~, reldir] = fileparts(fileparts(mfilename('fullpath')));
code
Я бы рекомендовал использовать полные пути в первых примерах, поскольку они полностью не зависят от текущего рабочего каталога пользователя.
Спасибо за обмен. Единственное, но я не буду «рекомендовать использование абсолютных путей», если вы планируете запустить свой код на другом компьютере. То есть например, если вы не кодируете ядро ОС - никогда не используйте абсолютные имена жестких ключей в любых пользовательских программах. –
@YauhenYakimovich Я смущен. Здесь нет жестко закодированных путей. Пути вычисляются «на лету» на основе местоположения m-файла. * Absolute * Я говорю о том, что использует первый вариант, который я разместил, в отличие от последнего варианта, который я опубликовал. – Suever
Правильно, после тщательной проверки - вы фактически говорите абсолютные пути, а не ** жестко закодированные абсолютные пути ** (что я неправильно понял). Виноват. –