Matlab'addpath / rmpath'在我的情况下不起作用

时间:2013-05-24 11:20:16

标签: path matlab

让我用一些虚拟文件名来解释我的情况。

我在目录'A'中工作,它有一个子目录'a'。我正在运行一个函数'func1',它存在于两个文件夹中。 'func1'需要'file1'和&执行期间'file2'。 'file1'& 'file2'出现在两个文件夹中,其中一些参数已更改。我根本无法更改文件名。

现在,问题是当我在'A'中运行'func1'时,一切正常。但是,当我使用'addpath / rmpath'在'a'中运行'func1'时,而不是使用'file1'&来自'a'的'file2',它正在使用'file1'&来自'A'的'file2'产生了错误的结果。

请告诉我如何更改路径,以便当我在子目录'a'中运行'func1'时,它总是使用'​​file1'&来自'a'而不是目录'A'的'file2'。

我希望我的解释清楚:S

2 个答案:

答案 0 :(得分:1)

如果我理解正确,您希望如果使用addpath将子目录添加到搜索路径,Matlab将使搜索路径优先于当前目录。不幸的是,恰恰相反,as per the Matlab documentation“当前文件夹中的函数优先于位于搜索路径上任何位置的具有相同文件名的函数。” - 这个在读取数据文件时也适用于load函数。 (顺便说一下,我怀疑因为这个原因你也没有运行你认为正在运行的func1版本 - 尝试输入which func1来查找)。

无论如何,这里的解决方案是确保Matlab选择正确版本的file1file2,您可以通过以下几种方式进行:

  • 将工作目录更改为a,因为工作目录优先:cd a
  • 将两个版本放入单独的子文件夹中,例如ab,并使用addpath添加separatley
  • 更改func1的不同版本,以明确引用这些文件,即load('./a/file1')

答案 1 :(得分:0)

使用addpathrmpath修改Matlab中的搜索路径。您的search path基本上是Matlab查找函数的文件夹列表。不适用于您要打开的文件。
如果您的文件位于文件夹A中并且这是您当前的工作目录,则Matlab将在A中查找文件。如果您更改为a并相应更改工作目录,Matlab将打开a中的文件 - 这与您的search path无关。如果要打开特定目录中的文件,请使用open命令中的完整路径:

fileID = fopen('/path/to/A/file1');  

在您的情况下,案例可能是fopen以上述方式应用。如果您希望Matlab始终打开当前工作目录中的文件,请将其更改为:

fileID = fopen('file1');