#matlab #path
#matlab #путь
Вопрос:
У меня есть куча кодов, которые в настоящее время хранятся на моем локальном компьютере. Есть две папки, одна называется «Ресурсы», а другая называется «src». Существует один основной скрипт, который необходимо запустить под названием «main.m» в «src», который вызывает файлы из «Ресурсов».
Если я скопирую все это на новый компьютер, пути изменятся, и MATLAB, возможно, больше не сможет найти «Ресурсы». Я знаю, что относительно «main.m» мне нужно подняться на один уровень, а затем перейти в «Ресурсы».
Каков наилучший способ заставить MATLAB указывать на «Ресурсы»?
В настоящее время я пытаюсь выполнить следующие действия
P = mfilename('fullpath')
который дает путь для main.m. Теперь я хочу перейти отсюда, на одну папку вверх, а затем в «Ресурсы». Или, если есть лучший способ, пожалуйста, дайте мне знать.
В конце концов, я хочу расширить его для работы с несколькими папками «Resources1», «Resources2» и т. Д. Поэтому MATLAB должен иметь возможность перейти к нужной папке.
Ответ №1:
Вы можете получить его как:
fullfile(fileparts(mfilename('fullpath')), '..', 'Resources');
Объяснение:
mfilename('fullpath')
вернет полный путь и имя M-файла, в котором происходит вызов, без расширенияfileparts
вернет путь к переданному файлу (только содержащий каталог)fullfile
создаст полную спецификацию каталога из переданных имен папок (примечание:'..'
всегда означает родительский каталог)
На основе этого довольно просто написать функцию, которая получает дочерний каталог каталога, содержащего файл:
getSiblingOfParentDirectory.m
function siblingDirPath = getSiblingOfParentDirectory(filepath, siblingDirName)
siblingDirPath = fullfile(fileparts(filepath), '..', siblingDirName);
end
затем использовать его в M-файле:
for i = 1:3
disp(getSiblingOfParentDirectory(mfilename('fullpath'), ['Resources', num2str(i)]));
end
Пример вывода:
D:pathtestResources1
D:pathtestResources2
D:pathtestResources3
Ответ №2:
Вы можете попробовать следующее:
ResourcesFolder = strrep(mfilename('fullpath'), 'srcmain', 'Resources');
addpath(ResourcesFolder);
%%Your code here where you need those files
rmpath(ResourcesFolder);
Конечно, это полностью зависит от имен ваших папок и файлов. По сути, «addpath» позволяет получить доступ к файлам в указанном каталоге, добавив его в путь поиска, а «rmpath» делает прямо противоположное.
Кроме того, если вы буквально хотите перейти к папке, находящейся на один уровень выше, вы можете выполнить следующее:
cd ..Resources
Который поднимается на один уровень вверх, выполняет поиск папки «Ресурсы», а затем изменяет текущий каталог на эту папку.