规范化虚拟文件系统的路径表达式

时间:2015-01-26 22:02:13

标签: c# path relative-path

假设你有一个ZipArchive。使用此类,可以处理未附加到实际文件系统的文件系统。

假设存档具有以下结构:

.
├── Foo
│   └── File1
└── Bar
    └── File2

现在可以阅读File1。如果File1包含对File2的相对引用,则会将其写为../Bar/File2

问题是如何将File1Foo/)的目录与路径../Bar/File2结合起来,使结果为Bar/File2ZipArchive无法处理相对于绝对路径的组合。)

尝试使用(dirrel)的解决方案:

  • Path.Combine (dir,rel)仅在两者之间放置/,因此无法解析该条目;
  • new DirectoryInfo (Path.Combine(dir,rel)).FullName生成包含当前目录(cd)的部分;和
  • Path.GetFullPath (Path.Combine(dir,rel)).FullName执行相同的操作

如何规范这种相对路径?当然可以自己编写一个规范化器,但算法缺乏某些部分规范的可能性很高。

1 个答案:

答案 0 :(得分:0)

找到解决方案:只需在第一条路径的前面添加/,以便Path.GetFullPath认为第一个文件来自根。

string fullpath = Path.GetFullPath ((Path.Combine ("/",dir,rel))).Substring (1);

还需要执行.Substring以在此过程中消除斜杠。然而,这不是一个可持续的解决方案,因为它假设人们使用 Linux 文件系统并且斜线的消除也不安全。