不知道为什么这不再起作用。很简单的。我有一个脚本,在同一路径中有一个文件夹。该文件夹包含一系列m个文件,脚本可以工作。
最初我只是使用
addpath('.../utilities/);
首次运行脚本时。但最近我开始收到此错误
警告:名称不存在或目录:... \ utilities
在路径中(第109行)
在addpath中(第88行)
在Myrunningcode中(第101行)
我不知道为什么。
我通过运行以下代码解决了该问题
p = mfilename('fullpath');
[filepath,~,~] = fileparts(p);
addpath([filepath,'/utilities/']);
至少我想知道为什么会发生此错误。
答案 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以来,这种方法就行得通(而且行之有效),因此您应该能够使用它而不必担心弃用