根据运行脚本Matlab添加文件夹路径

时间:2018-11-14 09:49:22

标签: matlab path relative-path

不知道为什么这不再起作用。很简单的。我有一个脚本,在同一路径中有一个文件夹。该文件夹包含一系列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 :(得分:3)

该问题可能是您当前的目录(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而不是使用(与OS相关的)文件分隔符手动进行串联。即使您始终使用相同的操作系统,错误的空间也较小(例如,双斜杠)。

答案 1 :(得分:2)

包含相对文件夹的正确方法是:

addpath('./utilities/');

带有一个点。

自从存在相对文件夹AFAIK以来,这种方法就行得通(而且行之有效),因此您应该能够使用它而不必担心弃用