如何在C ++中压缩相对文件名

时间:2013-04-21 10:00:33

标签: c++ filenames gnu

我正在构建自己的脚本语言,只是为了好玩(是的,我知道这样做的困难),在Linux上的C ++中。这种脚本语言将具有一种导入机制,用于在解释器传递阶段包含相对文件名。

因此/home/michael/foo/bar可能会加载可能会加载../bar/baz的{​​{1}},依此类推。 我得到的问题是我最终必须加载这样的文件名:../foo/baz(相对文件名以递归方式添加到当前目录中)。这在错误输出中看起来非常愚蠢,我想以后会引起其他问题,更不用说效率很低了。

除了编写自己的文件名解析器之外,我可以“优化”或“压缩”文件名,这样我只需要加载/home/michael/foo/../bar/../foo/baz吗?

我不反对使用库,但如果可能的话,我更喜欢使用POSIX / GNU C库/扩展或Boost,虽然从前瞻性的角度来看,我找不到任何一个做什么的东西我想,虽然也许我只是不知道该搜索什么。

2 个答案:

答案 0 :(得分:2)

尝试realpath

#include <stdlib.h>
#include <stdio.h>
int main()
{
  char resolved_path[100];
  realpath("/home/burgos/foo/../bar/../foo/baz", resolved_path);
  printf("\n%s\n",resolved_path);
  return 0;
}

答案 1 :(得分:2)

POSIX定义了一个名为realpath的函数,它将为您解析路径名。它会对. s,.. s,额外的斜杠进行排序,并且还会解析符号链接。