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

时间:2014-06-01 11:34:54

标签: matlab

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

有吗?

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

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


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

6 个答案:

答案 0 :(得分:9)

fullfile(pwd, relative_path)将亲戚转换为绝对路径。

答案 1 :(得分:4)

您可以使用

测试路径是否是绝对路径
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

此功能具有幂等性的优点。

答案 2 :(得分:2)

查看which是否符合您的要求:

full_path = which(relative_path);

答案 3 :(得分:1)

fullfile(pwd,relative_path)hack适用于我,但是如果你想要一些东西来获取规范形式,那么就没有内置的(截至2015b),但有一个备受好评的可下载脚本。

http://www.mathworks.com/matlabcentral/fileexchange/28249-getfullpath

答案 4 :(得分:0)

对于具有稍微宽松的可移植性要求(或合适的测试平台)的人来说,另一个想法是使用内置的 dir 函数创建一个仅包含单个文件的文件夹列表,然后使用fullfile

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

优点:

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

缺点:

  • 这仅在文件存在时有效

在 Windows 上使用 Matlab R2020a 测试

答案 5 :(得分:0)

好的,如果有人正在寻找这个,让我们恢复一个旧线程。

这里有一个方法,如果你想要相对于当前工作目录(或密码)的绝对路径。

% pwd: 'C:\first\branch'

dir('.\').folder % returns same as pwd, 'C:\first\branch'
dir('..\').folder % returns path one level up from pwd, 'C:\first'
dir('..\parallel_branch').folder % returns the absolute path to "parallel_branch" folder next to pwd, 'C:\first\parallel_branch'