2015-01-26 89 views
0

假设您有例如ZipArchive。使用这个类,可以处理未连接到真实文件系统的文件系统。规范化虚拟文件系统的路径表达式

说出归档具有以下结构:

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

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

的问题是一个如何可以与该路径../Bar/File2结合的File1Foo/)的目录,使得结果是Bar/File2(该ZipArchive不能处理相对与绝对路径的组合)。

与(dirrel)试图解决方案:

  • Path.Combine(dir,rel)仅会将两者之间的/,因此项不能得到解决;
  • newDirectoryInfo(Path.Combine(dir,rel)).FullName生成包含当前目录(cd)的零件;和
  • Path.GetFullPath(Path.Combine(dir,rel)).FullName做同样的

怎么能这样正常化相对路径?人们当然可以自己编写一个标准化程序,但其可能性很高,算法将缺少规范的某些部分。

回答

0

找到了解决办法:只需在第一个路径的前面添加/,这样Path.GetFullPath就认为第一个文件来自根目录。

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

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