Как заархивировать и разархивировать папки и вложенные папки в Silverlight? - PullRequest
0 голосов
/ 28 октября 2011

У меня есть приложение для 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 ]

1 голос
/ 29 октября 2011

Я думаю, вы найдете это руководство полезным.

Выдержка из ссылки выше

Объект ZipFile предоставляет метод с именем AddDirectory (), который принимает параметр directoryName. Проблема с этим методом что он не добавляет файлы в указанный каталог, но вместо этого просто создает каталог внутри zip-файла. Чтобы сделать это работать, вам нужно получить файлы в этом каталоге, циклически все объекты в этом каталоге и добавление их по одному. я был в состоянии выполнить эту задачу, создав рекурсивную функцию, которая сверлит всю структуру каталогов той папки, которую вы хотите застежка-молния. Ниже приведен фрагмент функции.

Полагаю, вы тоже столкнулись с той же проблемой, когда папка добавляется в zip-файл, но содержимое и подпапки не заархивированы.

Надеюсь, это поможет.

0 голосов
/ 02 ноября 2011

Просмотрите здесь пример кода о том, как использовать SharpZipLib для архивирования корневой папки, включая вложенные папки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...