Доброго времени суток! В примере ниже рассмотрим с Вами как можно создать 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:\ProjectsFolder\Wordpress_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#.