Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/65: Рейтинг темы: голосов - 65, средняя оценка - 4.68
Гость

Архивирование

03.07.2007, 07:12. Показов 12509. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как в C# архивировать каталоги(с подкаталогами и файлами) и отдельные файлы
Если можно код или пример.
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.07.2007, 07:12
Ответы с готовыми решениями:

Архивирование
Дорбрый день. Передо мной встала задача работы с архивами, необходимые условия: - упаковка по фильтру (добавление определённых файлов в...

Архивирование файлов из папки
Есть папка с файлами. Нужно заархивировать каждый файл по отдельности в другую папку. Можно использовать библиотеку Ionic.zip.

Архивирование в ZIP под .NET
Здравствуйте. прошу помощи в вопросе ирхивирования в ZIP средствами .NET в Visual Studio 2012. Судя по документации на сайте майкрософт,...

7
Администратор
 Аватар для mik-a-el
87817 / 53138 / 249
Регистрация: 10.04.2006
Сообщений: 13,761
03.07.2007, 10:22
Лучший ответ Сообщение было отмечено mik-a-el как решение

Решение

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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
        /// <summary>
        /// Исполняет файл программы с заданными аргументами в сеансе ДОС
        /// </summary>
        /// <param name="settingsFileName">Файл</param>
        /// <param name="arguments">Аргументы</param>
        /// <param name="output">Это то, что сказал ДОС в ответ на команду</param>
        /// <returns>Строка ошибки</returns>
        public static string ExecuteDOSCommand(string fileName, string arguments, out string output)
        {
            Process process = null;
            output = string.Empty;
 
            try
            {
                // Устанавливаем параметры запуска процесса
                process = new Process();
                process.StartInfo.FileName = fileName;
                process.StartInfo.Arguments = arguments;
                process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
                process.StartInfo.UseShellExecute = false;
                process.StartInfo.CreateNoWindow = true;
                process.StartInfo.RedirectStandardOutput = false;
                StreamReader reader = process.StandardOutput;
 
                // Старт
                process.Start();
                
 
                // Ждем пока процесс не завершится
                process.WaitForExit();
                output = reader.ReadToEnd();
 
                return string.Empty;
            }
            catch (Exception ex)
            {
                return ex.Message;
            }
            finally
            {
                if (process != null) 
                    process.Close();
            }
        }
 
        /// <summary>
        /// Распаковывает файл ARJ
        /// </summary>
        /// <param name="file">Файл архива</param>
        /// <param name="outDir">Каталог куда распаковывать (пустая строка - текущий каталог)</param>
        /// <param name="output">Это то, что сказал ДОС в ответ на команду</param>
        /// <returns>Строка ошибки</returns>
        public static string ExtractARJ(string file, string outDir, out string output)
        {
            output = string.Empty;
            string result = string.Empty;
 
            // Путь, где сейчас находится архиватор
            string arjCurrentPath = GetCurrentDir().FullName + "\\ARJ32.EXE";
 
            try
            {
                // Проверяем, на месте ли архиватор
                if (!File.Exists(arjCurrentPath))
                {
                    return "Файл ARJ32.EXE не найден.";
                }
 
                // Создаем каталог для разорхивации
                if (outDir != string.Empty)
                {
                    Directory.CreateDirectory(outDir);
                }
 
                // Формируем строку параметров для архиватора
                string arcParams = string.Format("x "{0}" "{1}" -u -y", file, outDir);
 
                // Вызываем архиватор
                result = ExecuteDOSCommand(arjCurrentPath, arcParams, out output);
                
                return result;
            }
            catch (Exception ex)
            {
                return ex.Message;
            }
            finally
            {
            }
        }
 
        /// <summary>
        /// Распаковывает файл ZIP
        /// </summary>
        /// <param name="file">Файл архива</param>
        /// <param name="outDir">Каталог куда распаковывать (пустая строка - текущий каталог)</param>
        /// <param name="output">Это то, что сказал ДОС в ответ на команду</param>
        /// <returns>Строка ошибки</returns>
        public static string ExtractZIP(string file, string outDir, out string output)
        {
            output = string.Empty;
            string result = string.Empty;
 
            try
            {
                // Создаем каталог для разорхивации
                if (outDir != string.Empty)
                {
                    Directory.CreateDirectory(outDir);
                }
 
                // Вызываем архиватор
                FastZip fastZip = new FastZip();
                fastZip.ExtractZip(file, outDir, string.Empty);
 
                return result;
            }
            catch (Exception ex)
            {
                return ex.Message;
            }
            finally
            {
            }
        }
 
        /// <summary>
        /// Распаковывает все архивные файлы во временный каталог
        /// </summary>
        /// <param name="sourceDir">Каталог с файлами</param>
        /// <param name="archivatorName">Наименование архиватора</param>
        /// <param name="filesExtractingOption">Настройки процесса распаковки файлов</param>
        /// <returns>Временный каталог</returns>
        public static string ExtractArchiveFilesToTempDir(string sourceDir, ArchivatorName archivatorName,
            FilesExtractingOption filesExtractingOption)
        {
            DirectoryInfo tmpDir = GetTempDir();
 
            ExtractArchiveFiles(sourceDir, tmpDir.FullName, archivatorName, filesExtractingOption);
 
            return tmpDir.FullName;
        }
 
        /// <summary>
        /// Распаковывает все архивные файлы
        /// </summary>
        /// <param name="sourceDir">Каталог с файлами</param>
        /// <param name="destDir">Каталог куда распаковывать (пустая строка - текеущий каталог)</param>
        /// <param name="archivatorName">Наименование архиватора</param>
        /// <param name="filesExtractingOption">Настройки процесса распаковки файлов</param>
        /// <returns>Временный каталог</returns>
        public static void ExtractArchiveFiles(string sourceDir, string destDir, ArchivatorName archivatorName,
            FilesExtractingOption filesExtractingOption)
        {
            DirectoryInfo dir = new DirectoryInfo(sourceDir);
 
            FileInfo[] files = new FileInfo[0];
            switch (archivatorName)
            {
                case ArchivatorName.Arj: files = dir.GetFiles("*.arj", SearchOption.AllDirectories);
                    break;
 
                case ArchivatorName.Zip: files = dir.GetFiles("*.zip", SearchOption.AllDirectories);
                    break;
            }
 
            for (int i = 0; i < files.GetLength(0); i++)
            {
                ExtractArchiveFile(files[i].FullName, destDir, archivatorName, filesExtractingOption);
            }
        }
 
        /// <summary>
        /// Распаковывает все архивные файлы в текущий каталог
        /// </summary>
        /// <param name="sourceDir">Каталог с файлами</param>
        /// <param name="archivatorName">Наименование архиватора</param>
        /// <param name="filesExtractingOption">Настройки процесса распаковки файлов</param>
        /// <returns>Временный каталог</returns>
        public static void ExtractArchiveFiles(string sourceDir, ArchivatorName archivatorName,
            FilesExtractingOption filesExtractingOption)
        {
            ExtractArchiveFiles(sourceDir, sourceDir, archivatorName, filesExtractingOption);
        }
 
        /// <summary>
        /// Распаковывает архивный файл во временный каталог
        /// </summary>
        /// <param name="file">Файл</param>
        /// <param name="archivatorName">Наименование архиватора</param>
        /// <param name="filesExtractingOption">Настройки процесса распаковки файлов</param>
        /// <returns>Временный каталог</returns>
        public static string ExtractArchiveFileToTempDir(string file, ArchivatorName archivatorName,
            FilesExtractingOption filesExtractingOption)
        {
            DirectoryInfo tmpDir = GetTempDir();
 
            ExtractArchiveFile(file, tmpDir.FullName, archivatorName, filesExtractingOption);
 
            return tmpDir.FullName;
        }
 
        /// <summary>
        /// Распаковывает архивный файл
        /// </summary>
        /// <param name="file">Файл</param>
        /// <param name="destDir">Каталог куда распаковывать (пустая строка - текеущий каталог)</param>
        /// <param name="archivatorName">Наименование архиватора</param>
        /// <param name="filesExtractingOption">Настройки процесса распаковки файлов</param>
        /// <returns>Временный каталог</returns>
        public static string ExtractArchiveFile(string file, string destDir, ArchivatorName archivatorName,
            FilesExtractingOption filesExtractingOption)
        {
            string str = string.Empty;
            string err = string.Empty;
 
            DirectoryInfo destPath = new DirectoryInfo(destDir);
            FileInfo fileInfo = new FileInfo(file);
 
            switch (filesExtractingOption)
            {
                case FilesExtractingOption.SeparateSubDirs:
                    destDir = destPath.CreateSubdirectory(ExtractingDirectoryPrefix + fileInfo.Name.Replace(".", string.Empty)).FullName;
                    break;
 
                case FilesExtractingOption.SingleDirectory:
                    break;
            }
 
            switch (archivatorName)
            {
                case ArchivatorName.Arj: err = ExtractARJ(file, destDir, out str);
                    break;
 
                case ArchivatorName.Zip: err = ExtractZIP(file, destDir, out str);
                    break;
            }
 
            if (err != string.Empty)
            {
                throw new Exception(
                    string.Format("Ошибка при разорхивировании файла {0}: {1}.", file, err));
            }
 
            return destDir;
        }
Вложения
Тип файла: rar ExternalPrograms.rar (209.7 Кб, 433 просмотров)
1
Гость
03.07.2007, 11:05
Ща попробуем.
Гость
04.07.2007, 08:22
Можно еще узнать о пространстве имен которое ты использовал?
Администратор
 Аватар для mik-a-el
87817 / 53138 / 249
Регистрация: 10.04.2006
Сообщений: 13,761
04.07.2007, 08:28
C#
1
2
3
4
5
6
7
8
9
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Text;
using System.Threading;
 
using ICSharpCode.SharpZipLib.Zip;
1
0 / 0 / 0
Регистрация: 14.06.2007
Сообщений: 21
25.07.2007, 09:16
Я попробовал код(вложенный), и у меня вопрос:
Можно ли сделать так чтобы при архивации/разархивации функции поддерживали русские шрифты?
Т.к при архивации/разархивации в место русских символов в имени файла выдает билеберду.
Или библиотека не поддерживает русский язык?
0
0 / 0 / 0
Регистрация: 13.11.2015
Сообщений: 4
15.07.2009, 10:52
не может определить FilesExtractingOption и ArchivatorName. это из какого пространства имен?
0
1923 / 428 / 41
Регистрация: 12.07.2007
Сообщений: 2,062
16.07.2009, 02:31
Это нумераторы.
Создайте их у себя в коде.

C#
1
2
3
4
5
FilesExtractingOption.SeparateSubDirs
FilesExtractingOption.SingleDirectory
 
ArchivatorName.Arj
ArchivatorName.Zip
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.07.2009, 02:31
Помогаю со студенческими работами здесь

Архивирование каталога без использования сторонних библиотек
может кто сталкивался...кодом поделится;)

Архивирование БД SQLite
Здравствуйте! Может кто подсказать как архивировать БД из приложения C#?

Архивирование в SQL Server 2005
Здравствуйте не напишите простенький пример или ссылку как заархивировать мне базу данных например Auto в СУБД SQL Server 2005?

Архивирование файлов
Доброго времени суток, столкнулся с проблемой, не знаю как реализовать =&gt; нужно файлы 2 определенных типов объединить в 1 архив. using...

Простенькое архивирование строки
Нужно написать алгоритм сжатия вводимой строки, где каждая подпоследовательность из одинаковых символов заменяется на текст х(к), где х -...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru