Я работаю над своим MATLAB кодом в нескольких разных местах, и это действительно поможет, если я смогу сделать код осознавая свое местоположение на компьютере. Я думаю, что есть функция, которая дает мне именно эту информацию, но я не могу вспомнить, что она называется, или найти ее в Google.
Идея состоит в том, что у меня есть функция myFunc
, которая нуждается в файле в своем собственном каталоге, который может находиться в разных местах на разных компьютерах. Поэтому в myFunc
я хочу сделать что-то вроде этого:
dir = theFunctionImLookingFor;
system(fullfile(dir, 'someApp.exe'));
(Также может быть, что функция, которую я ищу, не возвращает каталог, но имя каталога + m файла, но это мало чем отличается от меня.)
mfilename или лучше mfilename('fullpath')
При работе с классами мне часто нравится сохранять связанные данные в каталоге классов. Я использую which, чтобы получить путь, а затем fileparts, чтобы отрубить его.
[folder, name, ext] = fileparts(which('object'));
Где "объект" может быть именем функции или класса. Преимущество этого метода для меня заключается в том, что вы можете его вызывать из-за пределов mfile. Это необходимо, если вам нужно получить путь к производному классу из базового класса, например.
Другой метод, через Вальтер Роберсон на сайте ответов MATLAB, используя функцию dbstack
:
S = dbstack('-completenames');
S(1).file
Для этого вы должны использовать mfilename и cd.
mfilename вернет имя исполняемого m файла. cd сам будет печатать текущий каталог