2012-10-29 35 views
2

我正在爲基於.NET的CMS編寫插件,我想在第一次運行時解壓JavaScript,CSS和圖像文件的樹。因爲我想發佈一個dll,所以我打算壓縮這些目錄並將它們存儲爲資源。然後當插件運行時,它會檢查是否存在必需的文件,如果不存在,它將解壓縮它們。如何在資源內存儲目錄結構?

我知道資源是「扁平的」,因爲你不能建立一個目錄結構,所以某種形式的打包是我能看到的唯一途徑。

問題是,首先,這是一個可以接受的事情,其次,是否有任何內置的.NET庫允許我這樣做?我想我可能不得不使用GZip而不是Zip,如果我想使用內置插件,但是有沒有一種首選方法可以實現我想要實現的目標?


只是爲了增加一些問題 - 我知道一個常見的方案是使用.tar.gz,我目前正在使用.tar.gz。但由於某些原因,這使我感到次優,因爲我必須導入外部庫才能像這樣工作。我想這可能是一個普遍的事情,可以有一個或兩個方法來做到原生。

+1

「以文章鏈接的形式回答是好的......」不,他們不是:-)堆棧溢出的答案應該總是不僅僅是一個鏈接。 –

+0

是的。我很好,因爲我認爲我的問題可能是令人惱火的根本 - 只是我之前沒有以這種方式使用資源。 - 有我們去,編輯:) –

+1

不是一個真正的答案,但在類似的帖子提示:http://stackoverflow.com/questions/10677405/how-to-handle-unzipping-zipfile-with-paths-that-are -too-long-duplicate – Jester

回答

2

有一對夫婦的方式打包和壓縮隨.NET http://msdn.microsoft.com/en-us/library/system.io.packaging.aspxhttp://msdn.microsoft.com/en-us/library/system.io.compression.aspx(新的.NET 4.5)

(.NET 3.0中,我認爲釋放)的文件組也有一對夫婦可以使用免費的開源庫(Sharp Zip Lib:http://www.icsharpcode.net/opensource/sharpziplib/和DotNetZip lib http://dotnetzip.codeplex.com/)。可能還有其他人。我已經使用它們以及包裝apis。我喜歡DotNetZip的易用性,但您可以很快地使用它們中的任何一種。

壓縮資源是合理的 - 這是對空間的巧妙利用 - 但是您的資源無需直接映射到您將要提取它們的方式/位置(因爲您編寫代碼來提取和編寫資源如果它更有意義,你可以將它們存儲爲平面)。

+0

謝謝傑森,我現在實際上看着sharpziplib :)。 System.IO.Packaging也許正是我正在尋找的。我會試試看,並讓你知道我是怎麼走的。 –

+0

我目前在一個項目上使用System.IO.Packaging,它工作得很好。新的.net 4.5的東西看起來更好,但我不能升級到它。祝你好運。 –