it-swarm.com.de

Ich habe die Klasse "ZipFile" nicht im Namespace "System.IO.Compression" gefunden

Ich kann die Klasse "Zipfile" nicht im Namensraum "System.IO.Compression" verwenden. Mein Code lautet:

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

namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            string startPath = @"c:\example\start";
            string zipPath = @"c:\example\result.Zip";
            string extractPath = @"c:\example\extract";

            ZipFile.CreateFromDirectory(startPath, zipPath, CompressionLevel.Fastest,true);

            ZipFile.ExtractToDirectory(zipPath, extractPath);
        }
    }
}

der Fehler ist:

Der Name 'zipfile' ist im aktuellen Kontext nicht vorhanden

Wie kann ich das lösen?

104
Mohamed Kamal

Sie müssen der Assembly einen DLL-Verweis "System.IO.Compression.FileSystem.dll" hinzufügen und sicherstellen, dass Sie .NET 4.5 verwenden (da es in früheren Frameworks nicht vorhanden ist).

Für Informationen finden Sie die Assembly- und .NET-Version (en) in MSDN

192
Marc Gravell

Für diejenigen, die grüne Programmierer in .NET sind, fügen Sie den Verweis DLL als MarcGravell hinzu.

So fügen Sie einen Verweis in Visual C # hinzu

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Projektknoten, und klicken Sie auf Verweis hinzufügen.
  2. Wählen Sie im Dialogfeld "Verweis hinzufügen" die Registerkarte aus, die den Typ der Komponente angibt, auf die Sie verweisen möchten.
  3. Wählen Sie die Komponenten aus, auf die Sie verweisen möchten, und klicken Sie dann auf OK.

Aus dem MSDN-Artikel: Gewusst wie: Hinzufügen oder Entfernen von Referenzen mithilfe des Dialogfelds "Referenz hinzufügen" .

28
Will Ediger

sie können ein externes Paket verwenden, wenn Sie kein Upgrade auf 4.5 durchführen können. Eines davon ist Ionic.Zip.dll von DotNetZipLib.

using Ionic.Zip;

sie können es hier herunterladen, es ist kostenlos. http://dotnetzip.codeplex.com/

17
John Faulkner

Gehen Sie einfach zu Verweise und fügen Sie "System.IO.Compression.FileSystem" hinzu.

8
user6604144

Eine Lösung, die mir dabei geholfen hat: Gehen Sie zu Tools> NuGet Package Manager> NuGet Packaged for Solution verwalten ...> Durchsuchen> Suchen Sie nach System.IO.Compression.ZipFile und installieren Sie sie

1
Hanssss

System.IO.Compression ist jetzt als von Microsoft verwaltetes nuget-Paket verfügbar. 

Um ZipFile verwenden zu können, müssen Sie das System.IO.Compression.ZipFilenuget-Paket herunterladen.

0
Michał Jarzyna

Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf Verweise, und klicken Sie dann auf, um die Baugruppen zu erweitern. Suchen Sie nach System.IO.Compression.FileSystem und stellen Sie sicher, dass die Option aktiviert ist. Dann können Sie es in Ihrer Klasse verwenden - using System.IO.Compression;

Füge einen Referenz-Assembly-Screenshot hinzu

0
Erik Rausch

Ich weiß, dass dies ein alter Thread ist, aber ich kann mich nicht davon abhalten, nützliche Informationen dazu zu posten. Ich sehe, dass die Zip-Frage sehr häufig auftaucht und dies die meisten der häufigsten Fragen beantwortet.

Um die Rahmenprobleme der Verwendung von 4.5 + zu umgehen, gibt es eine ZipStorer-Klasse, die von jaime-olivares erstellt wurde: https://github.com/jaime-olivares/zipstorer . Außerdem hat er ein Beispiel dazu hinzugefügt Verwenden Sie diese Klasse ebenfalls und hat außerdem ein Beispiel hinzugefügt, wie nach einem bestimmten Dateinamen gesucht wird.

Und als Referenz, wie Sie dies verwenden und für eine bestimmte Dateierweiterung iterieren, können Sie dies als Beispiel tun:

#region
/// <summary>
/// Custom Method - Check if 'string' has '.png' or '.PNG' extension.
/// </summary>
static bool HasPNGExtension(string filename)
{
    return Path.GetExtension(filename).Equals(".png", StringComparison.InvariantCultureIgnoreCase)
        || Path.GetExtension(filename).Equals(".PNG", StringComparison.InvariantCultureIgnoreCase);
}
#endregion

private void button1_Click(object sender, EventArgs e)
{
    //NOTE: I recommend you add path checking first here, added the below as example ONLY.
    string ZIPfileLocationHere = @"C:\Users\Name\Desktop\test.Zip";
    string EXTRACTIONLocationHere = @"C:\Users\Name\Desktop";

    //Opens existing Zip file.
    ZipStorer Zip = ZipStorer.Open(ZIPfileLocationHere, FileAccess.Read);

    //Read all directory contents.
    List<ZipStorer.ZipFileEntry> dir = Zip.ReadCentralDir();

    foreach (ZipStorer.ZipFileEntry entry in dir)
    {
        try
        {
            //If the files in the Zip are "*.png or *.PNG" extract them.
            string path = Path.Combine(EXTRACTIONLocationHere, (entry.FilenameInZip));
            if (HasPNGExtension(path))
            {
                //Extract the file.
                Zip.ExtractFile(entry, path);
            }
        }
        catch (InvalidDataException)
        {
            MessageBox.Show("Error: The Zip file is invalid or corrupted");
            continue;
        }
        catch
        {
            MessageBox.Show("Error: An unknown error ocurred while processing the Zip file.");
            continue;
        }
    }
    Zip.Close();
}
0
Burgo855

Fügen Sie als Nuget-Referenz System.IO.Compression.ZipFile hinzu

0
prathesh p

Das Problem hier ist, dass Sie gerade den Verweis auf System.IO.Compression hinzugefügt haben. Es fehlt der Verweis auf System.IO.Compression.Filesystem.dll

Und Sie müssen es auf .net 4.5 oder höher ausführen (da es in älteren Versionen nicht vorhanden ist).

Ich habe gerade ein Skript bei TechNet gepostet. Vielleicht findet es jemand nützlich, dass es .net 4.5 oder 4.7 benötigt

https://gallery.technet.Microsoft.com/scriptcenter/Create-a-Zip-file-from-a-b23a7530

0
Jose Ortega