2012-10-29 34 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的东西看起来更好,但我不能升级到它。祝你好运。 –