Почтовая папка в C #

Что такое пример (простой код), как закрепить папку на C #?


Обновить:

Я не вижу пространство имен ICSharpCode . Я загрузил ICSharpCode.SharpZipLib.dll но я не знаю, где скопировать этот DLL-файл. Что мне нужно сделать, чтобы увидеть это пространство имен?

И у вас есть ссылка на этот пример MSDN для сжатия папки, потому что я прочитал все MSDN, но ничего не нашел.


Хорошо, но мне нужна следующая информация.

Где я должен копировать ICSharpCode.SharpZipLib.dll чтобы увидеть это пространство имен в Visual Studio?

Этот ответ изменяется с помощью .NET 4.5. Создание zip-файла становится невероятно простым . Никаких сторонних библиотек не потребуется.

 string startPath = @"c:\example\start"; string zipPath = @"c:\example\result.zip"; string extractPath = @"c:\example\extract"; ZipFile.CreateFromDirectory(startPath, zipPath); ZipFile.ExtractToDirectory(zipPath, extractPath); 

Из файла справки DotNetZip , http://dotnetzip.codeplex.com/releases/

 using (ZipFile zip = new ZipFile()) { zip.UseUnicodeAsNecessary= true; // utf-8 zip.AddDirectory(@"MyDocuments\ProjectX"); zip.Comment = "This zip was created at " + System.DateTime.Now.ToString("G") ; zip.Save(pathToSaveZipFile); } 

В BCL нет ничего, чтобы сделать это для вас, но есть две большие библиотеки для .NET, которые поддерживают функциональность.

  • SharpZipLib
  • DotNetZip

Я использовал оба варианта и могу сказать, что они очень полные и имеют хорошо разработанные API-интерфейсы, поэтому в основном это вопрос личных предпочтений.

Я не уверен, что они явно поддерживают добавление Folders, а не только отдельных файлов в zip-файлы, но создать довольно то, что рекурсивно повторится по каталогу и его подкаталогам, используя classы DirectoryInfo и FileInfo довольно легко.

В .NET 4.5 ZipFile.CreateFromDirectory (startPath, zipPath); метод не охватывает сценарий, в котором вы хотите закрепить несколько файлов и подпапок, не помещая их в папку. Это действительно, если вы хотите, чтобы распаковать файлы непосредственно в текущую папку.

Этот код работал для меня:

 public static class FileExtensions { public static IEnumerable AllFilesAndFolders(this DirectoryInfo dir) { foreach (var f in dir.GetFiles()) yield return f; foreach (var d in dir.GetDirectories()) { yield return d; foreach (var o in AllFilesAndFolders(d)) yield return o; } } } void Test() { DirectoryInfo from = new DirectoryInfo(@"C:\Test"); using (FileStream zipToOpen = new FileStream(@"Test.zip", FileMode.Create)) { using (ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Create)) { foreach (FileInfo file in from.AllFilesAndFolders().Where(o => o is FileInfo).Cast()) { var relPath = file.FullName.Substring(from.FullName.Length+1); ZipArchiveEntry readmeEntry = archive.CreateEntryFromFile(file.FullName, relPath); } } } } 

Папки не нужно «создавать» в zip-архиве. Второй параметр «entryName» в CreateEntryFromFile должен быть относительным путем, и при распаковке zip-файла будут обнаружены и созданы каталоги относительных путей.

В пространстве имен System.IO.Packaging есть class ZipPackage, который встроен в .NET 3, 3.5 и 4.0.

http://msdn.microsoft.com/en-us/library/system.io.packaging.zippackage.aspx

Вот пример того, как его использовать. http://www.codeproject.com/KB/files/ZipUnZipTool.aspx?display=Print

В MSDN есть статья, в которой есть пример приложения для распаковки и распаковки файлов и папок исключительно на C #. Я успешно использовал некоторые из этих classов в течение длительного времени. Код выпущен под лицензией Microsoft Permissive, если вам нужно знать что-то подобное.

EDIT: Спасибо Cheeso за то, что я немного отстаю от времени. Пример MSDN, на который я указал, фактически использует DotNetZip и в наши дни действительно очень полнофункциональен. Основываясь на моем опыте предыдущей версии этого, я бы с радостью порекомендовал его.

SharpZipLib также довольно зрелая библиотека и высоко оценена людьми, и доступна под лицензией GPL. Это действительно зависит от ваших потребностей в zipping и того, как вы просматриваете условия лицензии для каждого из них.

Богатые

Следующий код использует сторонний ZIP-компонент от Rebex :

 // add content of the local directory C:\Data\ // to the root directory in the ZIP archive // (ZIP archive C:\archive.zip doesn't have to exist) Rebex.IO.Compression.ZipArchive.Add(@"C:\archive.zip", @"C:\Data\*", ""); 

Или если вы хотите добавить больше папок без необходимости открывать и закрывать архив несколько раз:

 using Rebex.IO.Compression; ... // open the ZIP archive from an existing file ZipArchive zip = new ZipArchive(@"C:\archive.zip", ArchiveOpenMode.OpenOrCreate); // add first folder zip.Add(@"c:\first\folder\*","\first\folder"); // add second folder zip.Add(@"c:\second\folder\*","\second\folder"); // close the archive zip.Close(ArchiveSaveAction.Auto); 

Здесь вы можете скачать ZIP-компонент .

Использование бесплатной лицензии LGPL SharpZipLib является обычной альтернативой.

Отказ от ответственности: я работаю на Rebex

"Where should I copy ICSharpCode.SharpZipLib.dll to see that namespace in Visual Studio?"

Вам нужно добавить файл dll в качестве ссылки в свой проект. Щелкните правой кнопкой мыши ссылку Ссылки в обозревателе решений -> Добавить ссылку -> Обзор, а затем выберите dll.

Наконец, вам нужно будет добавить его в качестве используемого оператора в любые файлы, в которые вы хотите его использовать.

ComponentPro ZIP может помочь вам в достижении этой задачи. Следующий fragment кода сжимает файлы и директории в папке. Вы также можете использовать маску wilcard.

 using ComponentPro.Compression; using ComponentPro.IO; ... // Create a new instance. Zip zip = new Zip(); // Create a new zip file. zip.Create("test.zip"); zip.Add(@"D:\Temp\Abc"); // Add entire D:\Temp\Abc folder to the archive. // Add all files and subdirectories from 'c:\test' to the archive. zip.AddFiles(@"c:\test"); // Add all files and subdirectories from 'c:\my folder' to the archive. zip.AddFiles(@"c:\my folder", ""); // Add all files and subdirectories from 'c:\my folder' to '22' folder within the archive. zip.AddFiles(@"c:\my folder2", "22"); // Add all .dat files from 'c:\my folder' to '22' folder within the archive. zip.AddFiles(@"c:\my folder2", "22", "*.dat"); // Or simply use this to add all .dat files from 'c:\my folder' to '22' folder within the archive. zip.AddFiles(@"c:\my folder2\*.dat", "22"); // Add *.dat and *.exe files from 'c:\my folder' to '22' folder within the archive. zip.AddFiles(@"c:\my folder2\*.dat;*.exe", "22"); TransferOptions opt = new TransferOptions(); // Donot add empty directories. opt.CreateEmptyDirectories = false; zip.AddFiles(@"c:\abc", "/", opt); // Close the zip file. zip.Close(); 

http://www.componentpro.com/doc/zip имеет больше примеров

используя DotNetZip (доступен как пакет nuget):

 public void Zip(string source, string destination) { using (ZipFile zip = new ZipFile { CompressionLevel = CompressionLevel.BestCompression }) { var files = Directory.GetFiles(source, "*", SearchOption.AllDirectories). Where(f => Path.GetExtension(f). ToLowerInvariant() != ".zip").ToArray(); foreach (var f in files) { zip.AddFile(f, GetCleanFolderName(source, f)); } var destinationFilename = destination; if (Directory.Exists(destination) && !destination.EndsWith(".zip")) { destinationFilename += $"\\{new DirectoryInfo(source).Name}-{DateTime.Now:yyyy-MM-dd-HH-mm-ss-ffffff}.zip"; } zip.Save(destinationFilename); } } private string GetCleanFolderName(string source, string filepath) { if (string.IsNullOrWhiteSpace(filepath)) { return string.Empty; } var result = filepath.Substring(source.Length); if (result.StartsWith("\\")) { result = result.Substring(1); } result = result.Substring(0, result.Length - new FileInfo(filepath).Name.Length); return result; } 

Применение:

 Zip(@"c:\somefolder\subfolder\source", @"c:\somefolder2\subfolder2\dest"); 

Или

 Zip(@"c:\somefolder\subfolder\source", @"c:\somefolder2\subfolder2\dest\output.zip"); 
  • Что такое хорошая библиотека Java для распаковки / распаковки файлов?
  • Проблема с кодировкой изображений Twitter
  • Gzip против minify
  • Высококачественное сжатие JPEG с помощью c #
  • Почему BCL GZipStream (с StreamReader) не надежно обнаруживает ошибки данных с помощью CRC32?
  • Interesting Posts

    Когда я использую View Models, Partials, Templates и обрабатываю дочерние привязки с MVC 3

    Как просмотреть настройки конфигурации из Symfony2 config.yml?

    Почему я должен использовать базу данных на основе документов вместо реляционной базы данных?

    Возможно ли обновить коэффициент масштабирования окна tcp после трехстороннего рукопожатия, отправив syn / ack?

    RE: Выравнивание чисел на отдельных барах с помощью ggplot2

    Максимизация окон Командная строка

    Outlook 2013 с Google ActiveSync

    Как избежать того, чтобы данные classа делились между экземплярами?

    Доступ к считывателю смарт-карт хоста через подключение к удаленному рабочему столу

    Как подключиться к базе данных MySQL?

    Как получить доступ к сайту, который вы используете в своей сети?

    Как отменить длительную операцию базы данных?

    Является ли сдвиг слева (<<) отрицательным целым неопределенным поведением в C ++ 11?

    Как отключить Windows 7?

    Как рассчитать ширину текстового блока WPF для его известного размера шрифта и символов?

    Давайте будем гением компьютера.