Hitech123 Ответов: 2

Не удается сжать папки в C#, только файлы


Привет всем, мне нужно сжать папки и файлы. В исходной папке, если есть папки и файлы, программа будет сжимать только файлы...где я ошибся?

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.IO;
using System.Threading.Tasks;
using System.Threading;


namespace DBBackupns
{
    public partial class TestDirBackup : Form
    {
        int fullbacknum;
        int Incnumber;
        
        public TestDirBackup()
        {
            InitializeComponent();
        }

        private void GetSettings()
        {
            Settings settings;
            fullbacknum = 1;
            Incnumber = 1;
            settings = new Settings();
            fullbacknum = settings.GetSetting("BackupNumber", fullbacknum);
            Incnumber = settings.GetSetting("Incnumber", Incnumber);
        }

        private void SaveSettings()
        {
            Settings settings;
            settings = new Settings();
            settings.PutSetting("BackupNumber", fullbacknum);
            settings.PutSetting("Incnumber", Incnumber);
        }

        private void btnCompress_Click(object sender, EventArgs e)
        {
            string strsourcedir = "";    
            string strzipdir = "";      
            string strfilename ="";    
            HCompress   hc;
            BackupType bt = BackupType.Full;
            GetSettings();
            errorProvider1.Clear();
            strsourcedir = txtSourceDir.Text;
            strzipdir = txtZipDir.Text;
            
            if (rdobtnFull.Checked)
            {
                bt = BackupType.Full;
                fullbacknum++;
                strfilename = string.Format("BackupFull-{0}.zip", fullbacknum);
                Incnumber = 0;  
            }
            if (rdobtnInc.Checked)
            {
                bt = BackupType.Incremental;
                Incnumber++;
                strfilename = string.Format("BackupInc-{0}-{1}.zip", fullbacknum, Incnumber);
            }
            strfilename = strzipdir + "\\" + strfilename;
            txtFilename.Text = strfilename;
            hc = new HCompress();
            hc.ZipFiles(strfilename, strsourcedir, bt);
            SaveSettings();
        }


        private void button1_Click(object sender, EventArgs e)
        {
            using (var fldrDlg = new FolderBrowserDialog())
            {
                if (fldrDlg.ShowDialog() == DialogResult.OK)
                {
                    txtSourceDir.Text = fldrDlg.SelectedPath;
                }
            }
        }

        
    }


Что я уже пробовал:

Попытался использовать сеть zip dot, но безрезультатно

Dave Kreskowiak

Что вы используете для сжатия файлов? Не каждая библиотека поддерживает добавление дерева папок в результирующий файл .ZIP.

Все, что я смог найти на HCompress, это то, что он используется для сжатия изображений без потерь.

Maciej Los

Похоже на ответ, Дэйв.
Ваше здоровье!
Мацей

2 Ответов

Рейтинг:
2

CPallini

Этот Zip-файл.Метод CreateFromDirectory (System.IO.Compression) | Microsoft Docs[^] выглядит интересно.


Maciej Los

5ed!

CPallini

Спасибо тебе, Мацей!

Рейтинг:
1

RickZeeland

Вы можете использовать В 7-Zip, смотрите ответы здесь: Как бы я сжал папку с 7Zip в C#? - переполнение стека[^]
Он может быть загружен здесь: 7-Zip[^]


Maciej Los

5ed!