将相对路径转换为绝对路径的功能?

kjo*_*kjo 7 matlab

我花了很长时间无法找到内置的MATLAB函数来将相对文件路径转换为绝对文件路径(可移植).

有吗?

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

如果不存在上述任何一种情况,即使是(可移植地)测试路径是否是绝对的功能也会(具有与之前相同的条件:"内置"功能或带有测试套件的第三方功能) .


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

Dan*_*iel 10

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

  • @kjo`fullfile`是一个内置函数:http://www.mathworks.com/help/matlab/ref/fullfile.html. (5认同)
  • 当“.”时这不起作用。或“..”用于相对路径。 (3认同)
  • 对不起,但这种"转换"功能应始终是幂等的; 即`rel2abs(rel2abs(path))`应该产生与`rel2abs(path)`相同的输出.此外,我明确指出我不希望函数编写以回应这个问题(即未经测试的函数).你回答的非常多. (2认同)

j-h*_*hap 6

这是 MathWorks 自己使用的方法:

    [status, info] = fileattrib(file);
    if status
        % Return the full path if fileattrib found the file.
        fullFilePath = info.Name;
    end
Run Code Online (Sandbox Code Playgroud)


Hop*_*ope 5

您可以使用以下方法测试路径是否为绝对路径

javaFileObj = java.io.File(pathToBeTested);
javaFileObj.isAbsolute()
Run Code Online (Sandbox Code Playgroud)

不像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
Run Code Online (Sandbox Code Playgroud)

该函数具有幂等的优点。