0

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

我在目录“A”中工作,该目录有一个子目录“a”。我正在运行两个文件夹中都存在的函数“func1”。“func1”在执行过程中需要“file1”和“file2”。'file1' & 'file2' 存在于两个文件夹中,其中一些参数已更改。我根本不可能更改文件名。

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

请告诉我如何更改路径,以便当我在子目录“a”中运行“func1”时,它始终使用“a”中的“file1”和“file2”而不是目录“A”。

我希望我的解释清楚:S

4

2 回答 2

1

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

无论如何,这里的解决方案是确保 Matlab 选择正确的file1and版本file2,您可以通过多种方式做到这一点:

  • 将工作目录更改为a,因为工作目录具有优先权:cd a
  • 将这两个版本放入单独的子文件夹中,例如aand b,并用于单独addpath添加它们
  • 更改不同版本func1以明确引用文件,即load('./a/file1')
于 2013-05-24T12:02:57.577 回答
0

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

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

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

fileID = fopen('file1');  
于 2013-05-24T12:00:57.297 回答