我注意到大多数访问文件的Matlab函数,例如load()
通过在当前路径中找到一些包含与这些路径匹配的文件或目录的目录来解析相对路径。例如。如果当前工作目录是load('foo/bar.m')
但/home/someuser/dir1/foo/bar.m
在搜索路径上,则调用/home/someuser/dir2/foo/bar
将在/home/someuser/dir2
上加载/home/someuser/dir1
。
我发现这很容易出错并且容易出错,我该如何访问相对于当前工作目录的文件呢?
答案 0 :(得分:1)
您知道,Matlab可以解析相对路径和绝对路径。但是我的建议可以减轻您的麻烦,
PATH.SCRIPT = fileparts(mfilename('fullpath'))
cd(PATH.SCRIPT)
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'])
如果可能,请尽量不要弄乱Matlab的默认路径,并在初始化工作区时调用restoredefaultpath
。这样可以减少路径中可能存在名称冲突的伪造文件夹的可能性。
正如其他人所提到的,./
或['.', filesep]
也与当前文件夹一起提供。
就像@CrisLuengo提到的那样,与其说filesep
,不如说是用fullfile
组成路径,例如:load(fullfile(PATH.SCRIPT, '..', 'file_at_upper_dir_name'))