2015-07-14 2 views
1

Я пытаюсь заархивировать файлы с кодом C#, но показывая, что класс ZipFile не существует. Пожалуйста, укажите, как Zip с C# и я использую Framework 4.5Zip-файл в C#

Мой код написан ниже

using System; 
using System.IO; 
using System.IO.Compression; 


namespace ZipSample 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string[] MainDirs = Directory.GetDirectories("c:\\users\\public\reports"); 

      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)); 
       } 
      } 
     } 
    } 
} 

enter image description here

+0

Является ли ваше монтажное здание использующим целевую структуру профиля клиента? Если да, попробуйте изменить его на полный профиль .net 4.5 (вы можете изменить это в свойствах проекта) – Jay

+1

Не ответ на вашу проблему, но: измените c: \\ users \\ public \ reports на c: \\ users \\ public \\ reports или использовать @ "c: \ users \ public \ reports"; также ваше место сохранения неверно ... возможно, измените его на string.Format («c: \\ users \\ public \\ test {0} .zip», i); – Schuere

+0

Вам необходимо импортировать сторонний 'Ionic.dll' –

ответ

5

Решение 1:

это потому, что вы пытаетесь создать экземпляр статического класса.

using System.IO.Compression; 
... 

string startPath = @"c:\example\start"; 
string zipPath = @"c:\example\result.zip"; 
string extractPath = @"c:\example\extract"; 

ZipFile.CreateFromDirectory(startPath, zipPath); 
ZipFile.ExtractToDirectory(zipPath, extractPath); 

После исправления это, похоже, работает для меня с вашим кодом.

Из документации:

Предоставляет статические методы для создания, извлечения и открытия ZIP архивов.

Более подробная информация здесь: https://msdn.microsoft.com/en-us/library/system.io.compression.zipfile%28v=vs.110%29.aspx


Решение 2:

Это потому, что вы перепутали код библиотеки Ионные и и справочной библиотеки .Net. Если вы хотите придерживаться его, вы должны загрузить библиотеку и добавить ее в качестве ссылки вместо библиотек .Net.

Библиотека и документация можно найти здесь: http://dotnetzip.herobo.com/DNZHelp/Index.html или http://dotnetzip.codeplex.com/

Вот краткий пример взял из документации (находится в библиотеке почтовый скачанный по ссылкам выше):

string ZipFileToCreate = @"C:\Temp\Test.zip"; 
string DirectoryToZip = @"C:\Temp\FolderToZip\"; 
try 
{ 
    using (ZipFile zip = new ZipFile()) 
    { 
    zip.StatusMessageTextWriter = System.Console.Out; 
    zip.AddDirectory(DirectoryToZip); // recurses subdirectories 
    zip.Save(ZipFileToCreate); 
    } 
} 
catch (System.Exception ex1) 
{ 
    System.Console.Error.WriteLine("exception: " + ex1); 
} 
+2

Также обратите внимание, что это, вероятно, потому, что он пытается использовать Ionic ZipFile как .NET ZipFile. Весь пример неверен. – Default

+0

Исправлен вопрос, спасибо. Было бы хорошо использовать это, не так ли? –

+0

, возможно, также пример с Ionic, поэтому OP получает точку :) – Schuere

2

Убедитесь, что вы добавили System.IO.Compression.FileSystem.dll как ссылка. Информация была взята из MSDN.

Редактировать: Как линии zip.CompressionLevel = Ionic.Zlib.CompressionLevel.BestCompression; показывает, что вы путаете Моделировочная в ZipFile классе и т.д. (System.IO.Compression.FileSystem.dll) и сторонней библиотеки DotNetZip (Ionic.dll)

+1

Да, это уже сделано –

+0

Я добавил снимок экрана, который показывает ссылку, но его не работает –