Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
Заблокирован

Какой способ архивирования (сжатия) файлов практически лучше использовать?

27.08.2024, 22:01. Показов 1302. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Прочитал краткую информацию по архивированию (сжатию) файлов в c#
https://metanit.com/sharp/tutorial/5.7.php
По ссылке рассмотрены три класса ZipFile, DeflateStream и GZipStream
Что лучше - DeflateStream или GZipStream?
ZipFile очень просто использовать, но этот класс для каталога, а не для файла.
Есть ещё ZipArchive, ZipArchiveEntry
Может что-то ещё есть?
Что практически лучше использовать?
P.S. Я хочу для себя архиватор сделать, чтобы архивировать (возможно со сжатием) файлы с диска компа на внешний диск. Смотрю какие есть стандартные возможности.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.08.2024, 22:01
Ответы с готовыми решениями:

Какой способ конкатенации строк лучше использовать?
Всем доброго времени суток. Я запутался с объединением строк на С++. Несколько классов про string запутывают как-то. Вот например есть...

Какой способ размещения файлов лучше?
Делаю сайт тематики World Of Warcraft. Сайт сразу был рассчитан как СДЛ, поэтому всячески пытаюсь сделать его удобным в работе с...

Какой способ измерения времени лучше использовать для получения данных с comport?
Нужно получать время между измерениями с comport что лучше, использовать? Точность нужна до 0,01с

20
 Аватар для belalugoci
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
29.08.2024, 13:37
Студворк — интернет-сервис помощи студентам
Развлекался так же, получилось вот что:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.IO.Compression;
 
namespace bezip {
    class Program {
        public static List<string> listfiles = new List<string>();
        public static string arch_filename;
        public static string arch_distination;
        public static int totalFiles = 0;
        public static int quietStep = 0;
        public static bool quiet = false;
        static void Main(string[] args) {
            Stopwatch sw = new Stopwatch();
            Dictionary<string, CompressionLevel> ZipArgs = new Dictionary<string, CompressionLevel>() {
                { "-a0", CompressionLevel.NoCompression }, { "-a1", CompressionLevel.Fastest }, { "-a" , CompressionLevel.Fastest }, { "-a2", CompressionLevel.Optimal } };
            Dictionary<CompressionLevel, string> CLText = new Dictionary<CompressionLevel, string>() {
                { CompressionLevel.NoCompression, "NoCompression" }, { CompressionLevel.Fastest, "Fastest"}, { CompressionLevel.Optimal, "Optimal"} };
            sw.Restart();
            if (args.Length > 1 && args[1] == "-q") { quietStep = 1; quiet = true; }
            consoleWrite("Free Zip Compressor 0.43b (c) 2020 by E***** B*******\n", quiet, ConsoleColor.Blue);
            if (args.Length > 0)
                if (ZipArgs.ContainsKey(args[0]))
                    if (Zip(args, ZipArgs[args[0]])) {
                        consoleWrite($"{totalFiles} files compressed by Zip.{CLText[ZipArgs[args[0]]]} method.\n", quiet);
                        consoleWrite($"{ sw.ElapsedMilliseconds} ms", quiet, ConsoleColor.Green); }
                    else ShowError("Wrong mode argument.\n");
                else {
                    if (args[0] == "-e") {
                        Extract(args);
                        consoleWrite($"Extraction completed.\n", quiet);
                        consoleWrite($"{ sw.ElapsedMilliseconds} ms", quiet, ConsoleColor.Green); }
                    else ShowError("Wrong arguments.\n"); }
            else ShowHelp();
            sw.Stop();
        }
        public static void Extract(string[] args) {
            if (args.Length >= 2)
                if (File.Exists(args[1]))
                    if (Directory.Exists(args.Length == 3 ? args[2] : Directory.GetCurrentDirectory()))
                        using (ZipArchive archive = ZipFile.Open(args[1], ZipArchiveMode.Read))
                            archive.ExtractToDirectory(args.Length == 3 ? args[2] : Directory.GetCurrentDirectory(), true);
                    else ShowError("Wrong extract path.\n");
                else ShowError("Archive not exist.\n");
            else ShowError("Wrong arguments.\n");
        }
        public static void ShowError(string s, ConsoleColor cc = ConsoleColor.Red) {
            consoleWrite(s, false, cc);
            if (!quiet) ShowHelp();
        }
        public static void consoleWrite(string line, bool q, ConsoleColor cc = ConsoleColor.Gray) {
            if (!q) { Console.ForegroundColor = cc; Console.Write(line); }
        }
        public static bool Zip(string[] args, CompressionLevel cl) {
            bool result = false;
            if (args.Length >= (3 + quietStep)) {
                listfiles = FillFilesList(args);
                totalFiles = listfiles.Count;
                arch_distination = String.IsNullOrEmpty(arch_distination = Path.GetDirectoryName(args[1 + quietStep])) ? Directory.GetCurrentDirectory() : arch_distination;
                if (!arch_distination.EndsWith(Path.DirectorySeparatorChar.ToString(), StringComparison.Ordinal))
                    arch_distination += Path.DirectorySeparatorChar;
                arch_filename = String.Concat(Path.GetFileNameWithoutExtension(args[1 + quietStep]), Path.GetExtension(args[1 + quietStep]) == ".zip" ? ".zip" : Path.GetExtension(args[1 + quietStep]) + ".zip");
                foreach (var f in listfiles)
                    try {
                        if (f != arch_distination + arch_filename) {
                            consoleWrite($"{f} : ", quiet);
                            using (ZipArchive archive = ZipFile.Open(arch_distination + arch_filename, File.Exists(arch_distination + arch_filename) ? ZipArchiveMode.Update : ZipArchiveMode.Create))
                                archive.CreateEntryFromFile(f, Path.GetFileName(f), cl);
                            consoleWrite($"compressed\n", quiet, ConsoleColor.Green);
                            result = true; }
                        else totalFiles--;
                    } catch (Exception e) {
                        consoleWrite($"{e.Message}\n", quiet, ConsoleColor.Red);
                        totalFiles--;
                        result = false; }
            } else ShowError("Incorrect number of arguments.\n\n");
            return result;
        }
        public static List<string> FillFilesList(string[] args) {
            List<string> list = new List<string>();
            if (args.Length > 2 + quietStep)
                for (var i = (2 + quietStep); i < args.Length; i++)
                    if (args[i].Contains("*") || args[i].Contains("?"))
                        list.AddRange(Directory.EnumerateFiles(String.IsNullOrEmpty(Path.GetDirectoryName(args[i])) ? Directory.GetCurrentDirectory() : Path.GetDirectoryName(args[i]), Path.GetFileName(args[i])));
                    else list.Add(args[i]);
            return list;
        }
        public static void ShowHelp() {
            consoleWrite("Usage:  bezip -[mode[method]] [filename] - filenames separated by space\n" +
                         "Mode:   a - create / modify an archive file(Zip)\n" +
                         "          0 - no compression\n" +
                         "          1 - fastest (default)\n" +
                         "          2 - optimal\n" +
                         "        e - extract an archive file\n" +
                         "        q - quiet output\n", false, ConsoleColor.Yellow);
            consoleWrite("Sample: bezip -a  file.zip readme.txt\n" +
                         "        bezip -a1 file.zip *.*\n" +
                         "        bezip -e  file.zip\n", false);
        }
    }
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.08.2024, 13:37

Алгоритм сжатия. Какой лучше всего подойдет?
Какой алгоритм подойдет для сжатия рандомного файла, в котором частота (вероятность) появления составляющих его элементов равна...

Какой способ лучше
Производятся вычисления в цикле, где в зависимости от условий подключаются или не подключаются через include разные самописные функции. ...

Какой способ рисования в 2D лучше?
Приветствую! Захотел сделать свой контрол, нашел в интеренете аж целых 2 решение моей задачи. З первым вариантом разобрался, второй...

Как лучше залить текстуру в массив? Какой формат текстуры лучше использовать?
Как лучше залить текстуру в массив? Какой формат текстуры лучше использовать?

Какой способ работы с файлами лучше?
Мне известно по крайней мере три способа: 1 TStringList::LoadFromFile 2 std::ofstream 3 FILE *fp = fopen Чем отличаются...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
21
Ответ Создать тему
Новые блоги и статьи
сукцессия 33. открытые вопросы от клауде
anaschu 19.07.2026
"Что накопилось за эту часть А — тринадцать правок, из которых шесть пришли из ваших вопросов и каждая оказалась реальной ошибкой, а не калибровкой: односторонний симбиоз, отсутствующий листопад,. . .
32 сукцессия
anaschu 19.07.2026
сукцессия 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не «подкручивает» сходимость —. . .
сукцессия 31: модель микоризы - это модель ещё нескольких явлений, социальных и экономических
anaschu 18.07.2026
Теория «Всего»: апдейт v1. 1. 2 — 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не. . .
сукцессия 30. Массив проверяющих друг друга моделей
anaschu 18.07.2026
Архитектура сети взаимопроверяющих моделей микоризной сукцессии (v2. 0) Развитие тензорного ОДУ-ядра и создание кросс-платформенного калибровочного полигона Уважаемые коллеги! В продолжение. . .
Грибы - это женщины, деревья - это мужчины. Анти инь янь для союза мужчины и женщины.
anaschu 18.07.2026
ГЛАВНЫЙ НАУЧНО-ФИЛОСОФСКИЙ ВЫВОД: Сексуально-Репродуктивный Капитализм против Государства Моногамии Коллеги, мы вышли на финишную прямую 20-мерного ОДУ-моделирования вековой сукцессии (ветка. . .
Текстовый слайдер с нумерацией страниц и кроссбраузерность.
russiannick 18.07.2026
Один мой друг написал текстовый слайдер с нумерацией страниц. Сегодня я расскажу как он умудрился подружить его с кроссбраузерностью. Очевидно сложно угодить с шириной каждому браузеру. Один крадет. . .
Грибы - это мемы, дерево - это человек. Применение микоризной модели к теории меметики Докинза.
anaschu 18.07.2026
Меметический изоморфизм теории «всего»: Грибная сукцессия как модель эволюции идей Докинза Базовый код системы ОДУ микоризной сукцессии описывает не просто биологию, а универсальную. . .
Грибы - это корпорации, деревья - это государства. Механизм массонского захвата власти
anaschu 18.07.2026
Макроэкономический изоморфизм теории «всего»: Грибная сукцессия как модель транснационального капитализма Базовый код системы ОДУ микоризной сукцессии описывает не просто биологию, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru