Matlab: доступ к файлам относительно рабочего каталога - PullRequest
0 голосов
/ 13 мая 2019

Я заметил, что большинство функций Matlab работают с файлами, например, load() разрешить относительные пути путем нахождения некоторого каталога на текущем пути, который содержит файлы или каталоги, соответствующие этим путям. Например. вызов load('foo/bar.m') загрузит /home/someuser/dir1/foo/bar.m сверх /home/someuser/dir2/foo/bar, если текущий рабочий каталог /home/someuser/dir2, но /home/someuser/dir1 находится в пути поиска.

Я считаю, что это очень раздражает и подвержено ошибкам. Как я могу получить доступ к файлам относительно текущего рабочего каталога?

1 Ответ

1 голос
/ 14 мая 2019

Как вы знаете, Matlab может разрешать как относительные, так и абсолютные пути. Но мои предложения по решению вашей проблемы с меньшими головными болями:

  1. При каждом (релевантном / главном) сценарии убедитесь, что в вашем рабочем пространстве находится расположение сценариев с:

PATH.SCRIPT = fileparts(mfilename('fullpath')) cd(PATH.SCRIPT)

  1. Затем всегда вызывайте функции с абсолютными путями, используя:

load([PATH.SCRIPT, filesep, 'filename']) или же load([PATH.SCRIPT, filesep, '..' , filesep, 'file_at_upper_dir_name']) или же load([PATH.SCRIPT, filesep, 'subfolder' , filesep, 'file_at_lower_dir_name'])

  1. Если возможно, постарайтесь не слишком путаться со стандартным путем Matlab, а при инициализации вашего рабочего пространства вызовите restoredefaultpath. Это уменьшает вероятность того, что на вашем пути есть ложная папка, в которой могут происходить конфликты имен.

  2. Как уже упоминалось, ./ или ['.', filesep] также предоставляет текущую папку.

  3. Как упоминает @CrisLuengo, вместо filesep можно предпочесть составлять пути с fullfile, например: load(fullfile(PATH.SCRIPT, '..', 'file_at_upper_dir_name'))

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