2015-01-26 78 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以消除該過程中稍後的斜線。然而,這不是一個可持續的解決方案,因爲它使得使用文件系統的假設成爲可能,並且斜線的消除也是不安全的。