Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab';addpath/rmpath';在我的情况下不起作用_Path_Matlab - Fatal编程技术网

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

Matlab';addpath/rmpath';在我的情况下不起作用,path,matlab,Path,Matlab,让我用一些虚拟文件名来解释我的情况 我在目录“A”中工作,它有一个子目录“A”。我正在运行两个文件夹中都存在的函数“func1”func1'在执行过程中需要'file1'和'file2'两个文件夹中都存在文件1'和文件2',其中的一些参数已更改。我根本不可能更改文件名 现在的问题是,当我在“A”中运行“func1”时,一切正常。但是,当我使用“addpath/rmpath”在“a”中运行“func1”时,它使用的是“a”中的“file1”和“file2”,而不是“a”中的“file1”和“fil

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

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

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

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


我希望我的解释清楚:使用
addpath
rmpath
可以在Matlab中修改搜索路径。您的
搜索路径
基本上是一个文件夹列表,Matlab在其中查找函数。不适用于您要打开的文件。
如果您的文件位于文件夹
A
中,并且这是您当前的工作目录,Matlab将在
A
中查找文件。如果您更改为
a
,并相应地更改您的工作目录,Matlab将打开
a
中的文件-这与您的
搜索路径
无关。如果要打开特定目录中的文件,请使用open命令中的整个路径:

fileID = fopen('/path/to/A/file1');  
在您的情况下,
fopen
可能以上述方式应用。如果希望Matlab始终打开当前工作目录中的文件,请将其更改为:

fileID = fopen('file1');  

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

无论如何,这里的解决方案是确保Matlab选择了正确版本的
file1
file2
,这可以通过几种方式实现:

  • 将工作目录更改为
    a
    ,因为工作目录具有优先权:
    cd a
  • 将两个版本放在单独的子文件夹中,例如
    a
    b
    ,然后使用
    addpath
    分别添加它们
  • 更改不同版本的
    func1
    以明确引用文件,即
    load('./a/file1')

当您说“使用”文件1和文件2时,您的意思是什么?它们是
.m
文件还是使用
load
打开的数据文件?或者
fopen
?是的!!'cd'是要查找的命令。现在使用“cd”,当我引用子文件夹“a”时,我能够运行文件夹“a”中存在的所有文件,无论主文件夹“a”中存在多少同名文件。谢谢你,伙计!