我正在使用codeplex中的DotNetZip DLL(http://dotnetzip.codeplex.com/)来压缩程序中的一些文件。
我面临的问题是在压缩文件之后它保留了目录结构,当我解压缩zip文件时,所有父文件夹再次被创建,然后我才能查看该文件。当源文件存在于
中时非常烦人因此,如果我从g:\ Archive \ LogFiles \ W3SVC1 \ abc.log中压缩文件并在解压缩后创建'abc.zip'文件,则会创建文件夹Archive \ LogFiles \ W3SVC1 \然后只有我我能看到abc.log文件。这里'g:'是我的共享驱动器的名称。
我想摆脱所有这些父文件夹,以便我可以直接提取并到达压缩文件并打开它。我检查了Zipped文件的Path属性,它显示了Archive \ LogFiles \ W3SVC1。不知怎的,我需要以编程方式删除它,但不能轻易找到任何选项。
我使用的代码是这样的:
using (ZipFile zip = new ZipFile())
{
if (fileExtension != null)
{
zip.AddFiles(from f in sourceDir.GetFiles() where f.FullName.EndsWith(fileExtension) select f.FullName);
}
else
{
zip.AddFiles(from f in sourceDir.GetFiles() select f.FullName);
}
zip.Save(DestinationDir + OutFileName);
}
我还通过将reserveDirectoryHierarchy设置为'false'来尝试Addfiles的重载方法,但没有任何好处。
请让我知道该怎么做。
非常感谢提前。
答案 0 :(得分:1)
我没有正确调用Addfiles的重载方法。而不是Null我传递空字符串,现在它不保留目录结构。 所以更新后的代码如下:
if (fileExtension != null)
{
zip.AddFiles(from f in sourceDir.GetFiles() where f.FullName.EndsWith(fileExtension) select f.FullName,false,"");
}
else
{
zip.AddFiles(from f in sourceDir.GetFiles() select f.FullName,false,"");
}
zip.Save(DestinationDir + OutFileName);