让我用一些虚拟文件名来解释我的情况。
我在目录'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
答案 0 :(得分:1)
如果我理解正确,您希望如果使用addpath
将子目录添加到搜索路径,Matlab将使搜索路径优先于当前目录。不幸的是,恰恰相反,as per the Matlab documentation:“当前文件夹中的函数优先于位于搜索路径上任何位置的具有相同文件名的函数。” - 这个在读取数据文件时也适用于load
函数。 (顺便说一下,我怀疑因为这个原因你也没有运行你认为正在运行的func1
版本 - 尝试输入which func1
来查找)。
无论如何,这里的解决方案是确保Matlab选择正确版本的file1
和file2
,您可以通过以下几种方式进行:
a
,因为工作目录优先:cd a
a
和b
,并使用addpath
添加separatley func1
的不同版本,以明确引用这些文件,即load('./a/file1')
答案 1 :(得分:0)
使用addpath
和rmpath
修改Matlab中的搜索路径。您的search path
基本上是Matlab查找函数的文件夹列表。不适用于您要打开的文件。
如果您的文件位于文件夹A
中并且这是您当前的工作目录,则Matlab将在A
中查找文件。如果您更改为a
并相应更改工作目录,Matlab将打开a
中的文件 - 这与您的search path
无关。如果要打开特定目录中的文件,请使用open命令中的完整路径:
fileID = fopen('/path/to/A/file1');
在您的情况下,案例可能是fopen
以上述方式应用。如果您希望Matlab始终打开当前工作目录中的文件,请将其更改为:
fileID = fopen('file1');