Matlab 函数将相对路径转换为绝对路径?

Matlab 函数将相对路径转换为绝对路径?,matlab,Matlab,我花了相当长的时间寻找一个内置的MATLAB函数来将相对文件路径转换为绝对文件路径(可移植的),但毫无用处 有吗 我正在寻找最好是“内置”的东西(即,在MATLAB发行版中的某个地方可用,包括它的一个工具箱)。即使是“包私有”函数也可以接受,只要我可以检查函数的源代码。第二个最好的是第三方函数,只要它带有一个像样的测试套件。我不是在寻找针对这个问题编写的函数。1 如果没有上述任何一项,即使是测试(可移植)路径是否为绝对路径的函数也可以(条件与之前相同:“内置”函数或带有测试套件的第三方函数)

我花了相当长的时间寻找一个内置的MATLAB函数来将相对文件路径转换为绝对文件路径(可移植的),但毫无用处

有吗

我正在寻找最好是“内置”的东西(即,在MATLAB发行版中的某个地方可用,包括它的一个工具箱)。即使是“包私有”函数也可以接受,只要我可以检查函数的源代码。第二个最好的是第三方函数,只要它带有一个像样的测试套件。我不是在寻找针对这个问题编写的函数。1

如果没有上述任何一项,即使是测试(可移植)路径是否为绝对路径的函数也可以(条件与之前相同:“内置”函数或带有测试套件的第三方函数)


1实现这样一个函数的困难不是编写函数本身,而是为它编写一个足够完整的测试套件(当然,还要确保函数通过所有测试!)。

fullfile(pwd,相对路径)
将相对路径转换为绝对路径

查看是否满足您的要求:

full_path = which(relative_path);
fullfile(pwd,relative_path)hack对我来说很好,但是如果你想得到规范形式,没有内置的(截至2015b),但是有一个很好的可下载脚本


您可以使用

javaFileObj = java.io.File(pathToBeTested);
javaFileObj.isAbsolute()
char(javaFileObj.getCanonicalPath())
不同,它有时确实会错误地返回相对于C:\Windows\System32的不存在的路径,isAbsolute()似乎工作正常(在Win7上测试,MATLAB 2015b),因此构建绝对路径的代码如下所示

function F = rel2abs(F)
if ~java.io.File(F).isAbsolute
    F = fullfile(pwd,F);
end

此函数具有幂等性的优点。

对于在这里登陆的人来说,可移植性要求稍微放松(或合适的测试台),另一个想法是使用内置的
dir
函数创建一个只包含单个文件的文件夹列表,然后使用
fullfile
进行路径连接

dirListing = dir(relPath);
absPath = fullfile(dirListing(1).folder, dirListing(1).name);
优点:

  • 幂等元,即
    rel2abs(rel2abs(path))
    =
    rel2abs(path)
  • 简化相对路径中的任何
    /.
    /.
缺点:

  • 这仅在文件存在时有效

在Windows上使用Matlab R2020a进行测试

抱歉,但是这种“转换”函数应该始终是幂等函数;i、 e.
rel2abs(rel2abs(path))
应产生与
rel2abs(path)
相同的输出。此外,我明确指定我不希望为回答这个问题而编写函数(即未测试的函数)。您的答案很清楚。@kjo
fullfile
是一个内置函数:。我无法使
java.io.File.getAbsolutePath()
正常工作;例如
java.io.File.getAbsolutePath('foo')
返回一个路径,该路径的目录组件始终是当前MATLAB会话的启动目录,而与
pwd()的值无关。。。也许我没有正确使用它……当在相对路径中使用“.”或“…”时,这不起作用。@MilosMatovic我们正在进行术语辩论。。。绝对的,对我来说,意味着它总是有效的。如果从示例中删除了相对引用中的任何文件夹,则该文件仍将存在,但路径将不再有效。这条“最短、最直接”的解析路径就是我如何理解绝对的含义。这就是我的评论所适用的。特别是在Matlab中,比较两条路径,看看它们是否引用同一个文件,这就是诀窍。你需要解决的路径。太棒了!解决了我的问题。