如何获得具有其路径之一的文件或目录的真实完整路径?

时间:2015-02-27 15:46:37

标签: c++ c path cross-platform

可以在多个路径中访问相同的文件系统条目。

  1. 真正的完整路径 - / home / user / dir1 / file1
  2. 包含父目录的路径 - /home/user/dir1/../dir1/file1
  3. 带有直接符号链接的路径 - / home / user / dir1 / symlink_to_file1
  4. 带有间接符号链接的路径 - / home / user / symlink_to_dir1 / file1
  5. ...
  6. 我想要两个写一个函数,对于给定的两个路径,它将判断第二个路径指定的文件或目录是否在第一个路径指定的目录内(包括子目录)。

    我认为最明显的解决方案是找到两个文件系统条目的实际完整路径,然后检查第一个真实路径是否是第二个的前缀。这就是为什么问题的标题是关于找到真正的完整路径

    注意:我想为Windows和POSIX兼容系统编写该功能。

    注意:不能使用boost :: filesystem。

2 个答案:

答案 0 :(得分:1)

在Windows和Unix-land中, 没有单一的“真实路径”。特别是一个文件可以在Unix-land中通过ln和Windows 7以及之后的mklink创建许多不同的目录条目,称为硬链接。而且,在Windows中,您可以通过subst命令非常简单地定义映射到某个目录的本地逻辑驱动器,并通过例如映射到文件服务器目录的驱动器。 net use,您可以将驱动器安装为目录,例如通过mountvol命令。

然而,“真实路径”问题只是对实际问题的想象解决方案,即确定文件或目录是否在通过路径指定的目录中。

为此,为您要搜索的文件系统实体建立系统特定的ID,并扫描父目录链以查找该ID。抱歉,我误读了这个问题。我想不出任何有效的方法,这听起来像是通过所有可能的目录进行强力ID搜索,除非您可以利用自己的索引信息。

答案 1 :(得分:0)

您需要预先了解的问题是:有多少种方式可以到达/ path / to / filename?使用符号链接,答案是无限的(在文件系统大小的范围内)。文件系统任何部分上任何位置的任何符号链接都可以重定向到文件(或文件上方路径的某些部分)。即使不考虑硬链接,搜索空间也必须是/ base / path / of / interest /下的整个文件系统(可能是整个文件系统)。

允许符号链接,没有进一步的限制,没有非暴力方法来确定/ path / to / filename是否可以在/ base / path / of / interest /中访问。