我花了很长时间无法找到内置的MATLAB函数来将相对文件路径转换为绝对文件路径(可移植)。
有吗?
我正在寻找一些最好是“内置”的东西(即在MATLAB发行版的某个地方可用,包括其中一个工具箱)。即使是“包私有”功能也是可以接受的,只要我能检查功能的源代码即可。第二好的是第三方功能,只要它有一个像样的测试套件。我不正在寻找为回答这个问题而编写的函数。 1
如果没有上述任何一项,即使是测试(可移植)的功能,路径是否是绝对的(将具有与之前相同的条件:“内置”功能或带测试套件的第三方功能。)
1 实现这样一个函数的困难不是编写函数本身,而是为它编写一个足够完整的测试套件(当然,确保函数通过所有测试!)。 子>
答案 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'