Добавить путь к папке на основе сценария запуска Matlab - PullRequest
0 голосов
/ 14 ноября 2018

Не знаю, почему это больше не работает.Очень просто.У меня есть скрипт с папкой по тому же пути.Папка содержит серию m файлов для работы скрипта.

Первоначально я просто использовал бы

addpath('.../utilities/);

при первом запуске скрипта.но недавно я начал получать эту ошибку

Предупреждение: имя не существует или не является каталогом: ... \ utilities

В пути (строка 109)

Вaddpath (строка 88)

В Myrunningcode (строка 101)

и я не знаю почему.

Я исправил проблему, выполнив следующий код

p = mfilename('fullpath');
[filepath,~,~] = fileparts(p);
addpath([filepath,'/utilities/']);

По крайней мере, я хотел бы знать, почему произошла эта ошибка.

Вот мои настройки каталога.Я использую Windows 10 и Matlab 2016a.enter image description here

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Вероятно, проблема в том, что ваш текущий каталог (pwd) не совпадает с расположением файла. Относительный каталог не относится к текущему сценарию, он относится к pwd, поэтому обходной путь mfilename решает вашу проблему.

Первое решение - ваше, но вы можете сделать это в одну строку:

addpath( fullfile( fileparts( mfilename('fullpath') ), 'utilities' ) );

Тогда самый быстрый способ проверить, что ваши файлы уже находятся на пути, это использовать which:

% Assuming that myFile.m is within the utilities folder, and not shadowed elsewhere.
% If utilities is on the path, which('myFile') will not be empty.
if isempty( which( 'myFile' ) )
    addpath( fullfile( fileparts( mfilename('fullpath') ), 'utilities' ) );
end

В качестве альтернативы, вы можете связать вышеупомянутую проверку с переменной флага persistent, так что вам не придется повторять проверку, если вы снова вводите функцию.

Обратите внимание, что addpath не особенно медленный, это genpath, которого вы хотите избежать, если бы вы также добавили загрузку подкаталогов.

В сторону: лучше использовать fullfile вместо ручной конкатенации с (зависящими от ОС) разделителями файлов. Меньше места для ошибок (например, двойной косой черты), даже если вы всегда используете одну и ту же ОС.

0 голосов
/ 14 ноября 2018

Правильный способ включить относительную папку:

addpath('./utilities/');

с одной точкой.

Это работало (и работает) со времени существования относительных папок AFAIK, поэтому вы должны иметь возможность использовать его, не опасаясь устаревания

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...