У меня есть каталог, который содержит несколько файлов. Я хочу, сжимают эту папку до zip или tar.gz файла. Как я могу сделать его работу в C#?
Вы можете использовать DotNetZip Library. Она имеет достаточно богатые и полезные возможности.
EDIT:
string[] MainDirs = Directory.GetDirectories(DirString);
for (int i = 0; i < MainDirs.Length; i++)
{
using (ZipFile zip = new ZipFile())
{
zip.UseUnicodeAsNecessary = true;
zip.AddDirectory(MainDirs[i]);
zip.CompressionLevel = Ionic.Zlib.CompressionLevel.BestCompression;
zip.Comment = "This zip was created at " + System.DateTime.Now.ToString("G");
zip.Save(string.Format("test{0}.zip", i));
}
}
Я не думаю, что Windows делает что-то особенно умное (например, пытается переосмыслить поплавок в базе 10) здесь: я бы предположил, что это просто точное вычисление первых 17 значащих цифр (что даст '11.545000000000000'), а затем прикрепление дополнительных нулей в конце, чтобы составить требуемое количество мест после точки.
Как говорят другие, различные результаты для 0,125 получены от Windows, использующей округление наполовину вверх, и Linux, использующей округление наполовину четно.
Обратите внимание, что для Python 3.1 (и Python 2.7, когда он появляется) результат форматирования float будет независимым от платформы (за исключением, возможно, необычных платформ).
-121--4028662-No.
Как только класс декалорирован, он не может быть «unset»
Возможно, пространства имен могут быть полезны для вас?
-121--4268389-я использую пространство имен System.IO.Packaging, которое было введено в .NET Framework 3.5. Я решил использовать его, потому что он основан на классах .NET Рамки Base, и не требуется код третьей стороны, который взрывает размер кода..
вот еще одна запись на Stackoverflow относительно этого вопроса
И вот объявление пространства имен и ZipPackage/объяснение @ MSDN
надежда, которая помогает
Кристиану
Это хорошее обсуждение , в котором обсуждается возможность сделать это без сторонних библиотек. Я думаю, тебе стоит взглянуть на это.
Вот большой репозиторий примеров кодов, которые могут помочь вам в вашей работе. Удачи ..
GZip является частью Microsoft Framework 2.0 и более поздних версий. Он называется GZipStream в пространстве имен System.IO.Compression.
Чтобы сжать каталог с помощью этого класса, вам нужно создать сериализуемый класс (например, Directory), который содержит коллекцию файлов.
Класс Files будет содержать имя файла и поток файла для чтения байтов из файла. Как только вы примените GZip к каталогу, он будет читать файлы один за другим и записывать их в GZipStream.
Проверьте эту ссылку: http://www.vwd-cms.com/forum/forums.aspx?topic=18
Другой вариант до версии 3.5 - использование утилит zip от J#. В конце концов, .Net не имеет значения, на каком языке был написан код ;-).
Статьи о том, как это сделать:
Попробуйте использовать SharpZipLib . Он поддерживает сжатие как GZip, так и ZIP в C #.
Здесь есть отличный учебник , в котором описывается, что вам нужно сделать, чтобы заархивировать каталог с помощью SharpZipLib.
использовать 7zip из командной строки в C# --> LZMA SDK поддерживает C#, и в пакете есть кодовые примеры