Хобрук: Ваш путь к мастерству в программировании

Заархивировать папку, созданную на C #

Я создаю папку на C # и надеюсь заархивировать ее, как только создам. Я осмотрелся (Как заархивировать папку), (http://dotnetzip.codeplex.com/), но пока безуспешно. Я немного опасаюсь использовать dotnetzip, поскольку его последний выпуск был 5 лет назад.

Актуален ли dotnetzip в Visual Studio 2015 или существует более современный способ архивирования папок в C # без использования пакета?

Вот как я копирую папки;

    private static void CopyDirectory(string SourcePath, string DestinationPath, bool overwriteexisting)
    {

        SourcePath = SourcePath.EndsWith(@"\") ? SourcePath : SourcePath + @"\";
        DestinationPath = DestinationPath.EndsWith(@"\") ? DestinationPath : DestinationPath + @"\";

        if (Directory.Exists(SourcePath))
        {
            if (Directory.Exists(DestinationPath) == false)
                Directory.CreateDirectory(DestinationPath);

            foreach (string fls in Directory.GetFiles(SourcePath))
            {
                FileInfo flinfo = new FileInfo(fls);
                flinfo.CopyTo(DestinationPath + flinfo.Name, overwriteexisting);
            }
            foreach (string drs in Directory.GetDirectories(SourcePath))
            {
                DirectoryInfo drinfo = new DirectoryInfo(drs);
                CopyDirectory(drs, DestinationPath + drinfo.Name, overwriteexisting);
            }
        }
    }

Я хочу заархивировать созданную папку после этого.

13.01.2016

  • пока не повезло не совсем описательное. Покажи свои попытки и их результаты. 13.01.2016
  • Есть ZipFile.CreateFromDirectory в. Нетто 4.5 13.01.2016
  • Посмотрите на сжатие с конкретной темой ZipArchive. 13.01.2016
  • @stuartd Спасибо за ответ. Я только что пробовал использовать это, но получаю сообщение об ошибке: The file already exists. Насколько я понимаю, ему нужен файл, чтобы он мог его заархивировать? 13.01.2016
  • Из документации я полагаю, что эта ошибка указывает на то, что файл zip уже существует. - Если архив уже существует, генерируется исключение IOException ... destinationArchiveFileName уже существует 13.01.2016
  • @stuartd довольно странно, потому что это определенно не так. Спасибо за помощь, я продолжу расследование. Если вы предложите свой комментарий в качестве ответа, я приму. 13.01.2016
  • @CBreeze готово, спасибо 13.01.2016

Ответы:


1

Чтобы заархивировать папку, инфраструктура .Net 4.5 содержит ZipFile.CreateFromDirectory:

string startPath = @"c:\example\start";
string zipPath = @"c:\example\result.zip";

ZipFile.CreateFromDirectory(startPath, zipPath);
13.01.2016
  • но OutputStream.Write (buffer, 0, sourceBytes); будут все эти файлы в одной папке ... как сохранить? 01.07.2019

  • 2

    Просто хотел добавить свои два цента к сообщению, которое вы уже приняли в качестве ответа. Допустим, у вас есть структура папок:

    C:\RootFolder
    C:\RootFolder\Folder1
    C:\RootFolder\Folder1\Folder1a
    C:\RootFolder\Folder1\Folder1b
    C:\RootFolder\file1.txt
    C:\RootFolder\file2.txt
    

    ZipFile.CreateFromDirectory, безусловно, лучший вариант. Никаких сторонних библиотек не требуется. Вам просто нужно сослаться на System.IO.Compression.FileSystem

    Я хотел отметить следующее: вы можете заархивировать всю RootFolder, включая его, в архив

    ZipFile.CreateFromDirectory(@"C:\RootFolder", @"C:\RootFolder.zip", 
                                CompressionLevel.Optimal, true);
    

    или содержимое RootFolder без самой папки

    ZipFile.CreateFromDirectory(@"C:\RootFolder", @"C:\RootFolder.zip", 
                                CompressionLevel.Optimal, false);
    

    Четвертый параметр (bool includeBaseDirectory) дает нам эту гибкость. Надеюсь, это кому-то поможет.

    07.02.2017
  • но OutputStream.Write (buffer, 0, sourceBytes); будут все эти файлы в одной папке ... как сохранить? 01.07.2019

  • 3

    Как заархивировать файл в C #, без сторонних API? охватывает те же вопросы и предлагает решения для обоих .Net 3.5 (https://stackoverflow.com/a/940621/2381157) и .Net 4.5 (https://stackoverflow.com/a/20200025/2381157), поэтому я удивлен, что @kap заявляет, что для этого не существует класса .NET.

    13.01.2016
  • Почему голосование против? Ссылки на повторяющийся вопрос содержат ту же информацию, что и @stuartd, и это принятый ответ. 14.01.2016

  • 4

    Вы можете использовать стороннюю dll ICSharpCode.SharpZipLib, внутри которой вы можете сжать каталог, используя файл загрузки ниже, в filsstream fs и продолжить bytes = fs.Read (buffer, 0, buffer.Length) zipFile.Write (buffer, 0, bytes)

    13.01.2016
    Новые материалы

    Учебные заметки JavaScript Object Oriented Labs
    Вот моя седьмая неделя обучения программированию. После ruby ​​и его фреймворка rails я начал изучать самый популярный язык интерфейса — javascript. В отличие от ruby, javascript — это более..

    Разбор строк запроса в vue.js
    Иногда вам нужно получить данные из строк запроса, в этой статье показано, как это сделать. В жизни каждого дизайнера/разработчика наступает момент, когда им необходимо беспрепятственно..

    Предсказание моей следующей любимой книги 📚 Благодаря данным Goodreads и машинному обучению 👨‍💻
    «Если вы не любите читать, значит, вы не нашли нужную книгу». - J.K. Роулинг Эта статья сильно отличается от тех, к которым вы, возможно, привыкли . Мне очень понравилось поработать над..

    Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
    каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

    Как настроить Selenium в проекте Angular
    Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

    Аргументы прогрессивного улучшения почти всегда упускают суть
    В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

    Введение в Джанго Фреймворк
    Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..