如何在Silverlight中压缩和解压缩文件夹及其子文件夹?

时间:2011-10-28 07:07:29

标签: zip windows-phone-7.1 windows-phone-7

我有一个Windows Phone应用程序。我使用SharpZipLib来压缩文件夹及其子文件夹。这只是压缩文件夹,但文件夹内的数据没有压缩。任何人都可以指导我如何做到这一点?

我的代码:

private void btnZip_Click(object sender, RoutedEventArgs e)
    {
        using (IsolatedStorageFile appStore = IsolatedStorageFile.GetUserStoreForApplication())
        {
            foreach (string filename in appStore.GetFileNames(directoryName + "/" + "*.txt"))
            {                   
               GetCompressedByteArray(filename);
            }
            textBlock2.Text = "Created file has Zipped Successfully";
        }
    }
 public byte[] GetCompressedByteArray(string content)
        {
            byte[] compressedResult;
            using (MemoryStream zippedMemoryStream = new MemoryStream())
            {
                using (ZipOutputStream zipOutputStream = new ZipOutputStream(zippedMemoryStream))
                {
                    zipOutputStream.SetLevel(9);
                    byte[] buffer;                   
                    using (MemoryStream file = new MemoryStream(Encoding.UTF8.GetBytes(content)))
                    {
                        buffer = new byte[file.Length];
                        file.Read(buffer, 0, buffer.Length);
                    }                    
                    ZipEntry entry = new ZipEntry(content);
                    zipOutputStream.PutNextEntry(entry);
                    zipOutputStream.Write(buffer, 0, buffer.Length);
                    zipOutputStream.Finish();
                }
                compressedResult = zippedMemoryStream.ToArray();
            }
            WriteToIsolatedStorage(compressedResult);
            return compressedResult;
        }

        public void WriteToIsolatedStorage(byte[] compressedBytes)
        {
            IsolatedStorageFile appStore = IsolatedStorageFile.GetUserStoreForApplication();
            appStore.CreateDirectory(ZipFolder);
            using (IsolatedStorageFileStream zipTemplateStream = new IsolatedStorageFileStream(ZipFolder+"/"+directoryName + ".zip", FileMode.OpenOrCreate, appStore))
            using (BinaryWriter streamWriter = new BinaryWriter(zipTemplateStream))
            {
                streamWriter.Write(compressedBytes);
            }
        }

2 个答案:

答案 0 :(得分:1)

我认为你会发现this guide有帮助。

以上链接的摘录

  

ZipFile对象提供了一个名为AddDirectory()的方法   接受参数directoryName。这种方法的问题是   它不会在指定目录中添加文件   而只是在zip文件中创建一个目录。为了做到这一点   工作,您需要通过循环来获取该目录中的文件   该目录中的所有对象,并一次添加一个对象。我曾是   能够通过创建递归函数来完成此任务   钻取您想要的文件夹的整个目录结构   压缩。下面是该功能的片段。

我猜你也面临着将文件夹添加到zip文件的相同问题,但内容和子文件夹没有压缩。

希望这有帮助。

答案 1 :(得分:0)

有关如何使用SharpZipLib压缩包含嵌套文件夹的根文件夹的代码示例,请查看over here