Создание zip-архива из папки и всех вложенных подпапок в C#

Создание zip-архива из папки и всех вложенных подпапок в C#

Создание zip-архива из папки и всех вложенных подпапок в C#

Доброго времени суток! В примере ниже мы рассмотрим с Вами как можно создать zip-архив в C# из папки и всех вложенных
в нее папок
, но без явно исключенных папок.

Итак, код:



using System;

using System.Collections.Generic;

using System.IO;

using System.IO.Compression;

using System.Linq;



namespace TraverseFilesAndZipConsoleApp

{

    internal class Program

    {

        static void Main(string[] args)

        {

            // исходная папка из которой создается архив

            string dir = @"D:ProjectsFolderWordpress_6";



            // название создаваемого zip архива

            string zipFileName = $"Wordpress6_{DateTime.Now.Second}.zip";



            // получаем список файлов кроме файлов из папок obj и bin

            var files = GetDirectoryFiles(dir, new List<string> { "\obj\", "\bin\" });



            // создаем архив

            ZipFiles(files, zipFileName);



        }







        public static IEnumerable<string> GetDirectoryFiles(string source_dir, List<string> excludes)

        {

            // проходимся по всем папкам и подпапкам

            return Directory.EnumerateFiles(source_dir, "*.*", SearchOption.AllDirectories)

                            .Where(filename =>

                            {

                                foreach (var pattern in excludes)

                                {

                                    // если путь к файлу содерждит шаблон, то такой файл нам не нужен

                                    if (filename.Contains(pattern)) return false;

                                }



                                return true;

                            });



        }







        public static void ZipFiles(IEnumerable<string> files, string whereToSave = "files.zip")

        {

            // если файл создаваемого архива существует удаляем его, такая логика необязательна

            if (File.Exists(whereToSave))

            {

                File.Delete(whereToSave);

            }



            // создаем файл архива

            using (var archive = ZipFile.Open(whereToSave, ZipArchiveMode.Create))

            {

                foreach (var file in files)

                {

                    // добавляем в архив файлы

                    archive.CreateEntryFromFile(file, file);

                }

            }

        }

    }

}





Таким образом , вот так просто можно создать архив из папки и всех ее подпапок в C#.

Источник

НЕТ КОММЕНТАРИЕВ

Оставить комментарий