为什么此代码用于访问父目录在Matlab中不起作用?

时间:2019-06-15 23:31:17

标签: macos matlab

我正在尝试以下代码:

RENDER4CNN_ROOT = fullfile(mfilename('fullpath'),'../../../');
PASCAL3D_DIR = fullfile(RENDER4CNN_ROOT, 'datasets/pascal3d/');
addpath(fullfile(PASCAL3D_DIR, 'VDPM'));
addpath(fullfile(PASCAL3D_DIR, 'Annotation_tools'));
addpath(RENDER4CNN_ROOT);

它给我“警告:名称不存在或目录:”,我也无法cd。

该代码比我的Matlab版本稍旧。有什么问题?这段代码是为其他操作系统编写的吗?

修改

ls -al输出

drwxr-xr-x@  9 Goldname  staff   288 Oct  8  2016 .
drwxr-xr-x@ 14 Goldname  staff   448 Oct  8  2016 ..
-rwxr-xr-x@  1 Goldname  staff  5686 Oct  8  2016 get_voc12train_truncation_stats.m
-rwxr-xr-x@  1 Goldname  staff  1847 Oct  8  2016 get_voc12train_view_stats.m
drwxr-xr-x@ 65 Goldname  staff  2080 Jun 15 15:27 matlab_kde_package
-rwxr-xr-x@  1 Goldname  staff  2684 Oct  8  2016 run_sampling.m
-rwxr-xr-x@  1 Goldname  staff  2047 Oct  8  2016 sample_truncations.m
-rwxr-xr-x@  1 Goldname  staff  2954 Oct  8  2016 sample_viewpoints.m
-rwxr-xr-x@  1 Goldname  staff   442 Jun 15 17:15 setup_path.m

从我所见,mfilename使用不正确?它输出目录和文件,即使在末尾附加了“ ..”,我的命令行也无法将其输入到该目录和文件。

我正在使用MacOS。命令行似乎无法执行

之类的操作
cd /directory/file/..

2 个答案:

答案 0 :(得分:1)

mfilename('fullpath')输出带有完整路径的运行其M文件的名称。在您的情况下,根据评论,此为/Foo/RenderForCNN-master/render_pipeline/kde/setup_pathsetup_path是M文件的名称(减去.m扩展名)。

fullfile(mfilename('fullpath'),'../../../')

因此创建路径/Foo/RenderForCNN-master/render_pipeline/kde/setup_path/../../../。这是无效路径,因为setup_path不存在。如果要添加文件扩展名,它将显示为/Foo/RenderForCNN-master/render_pipeline/kde/setup_path.m/../../../,这也不是有效路径。

您需要从mfilename的输出中删除M文件的名称:

fullfile(fileparts(mfilename('fullpath')),'../../../')

您现在需要确保以这种方式实际到达了预期的目录,有可能不再需要..之一。

答案 1 :(得分:0)

打印此变量RENDER4CNN_ROOT并检查是否可以手动cd进入它。

运行cd RENDER4CNN_ROOT

如果收到错误,则必须根据脚本位置相应地修改此参数'../../../'

由于addpath(),您正在收到警告,因为它找不到fullfile(PASCAL3D_DIR, 'VDPM')给出的路径