假设你有一个ZipArchive
。使用此类,可以处理未附加到实际文件系统的文件系统。
假设存档具有以下结构:
.
├── Foo
│ └── File1
└── Bar
└── File2
现在可以阅读File1
。如果File1
包含对File2
的相对引用,则会将其写为../Bar/File2
。
问题是如何将File1
(Foo/
)的目录与路径../Bar/File2
结合起来,使结果为Bar/File2
(ZipArchive
无法处理相对于绝对路径的组合。)
尝试使用(dir
和rel
)的解决方案:
Path.Combine
(dir,rel)
仅在两者之间放置/
,因此无法解析该条目; new
DirectoryInfo
(Path.Combine(dir,rel)).FullName
生成包含当前目录(cd
)的部分;和Path.GetFullPath
(Path.Combine(dir,rel)).FullName
执行相同的操作如何规范这种相对路径?当然可以自己编写一个规范化器,但算法缺乏某些部分规范的可能性很高。
答案 0 :(得分:0)
找到解决方案:只需在第一条路径的前面添加/
,以便Path.GetFullPath
认为第一个文件来自根。
string fullpath = Path.GetFullPath ((Path.Combine ("/",dir,rel))).Substring (1);
还需要执行.Substring
以在此过程中消除斜杠。然而,这不是一个可持续的解决方案,因为它假设人们使用 Linux 文件系统并且斜线的消除也不安全。