2016-06-01 16 views
0

Ich habe diese Seite für eine Weile gesucht und kann nicht scheinen, eine Lösung zu finden. Ich versuche, ZipFile zu verwenden, um einige PDF-Dateien aus meinem Verzeichnis zip aber wenn ich Using zip As ZipFile = New ZipFile Typ I Fehler bekommen sagen:VB.Net 4.6 mit Zipfile

‚Mit‘ Operanden vom Typ ‚System.IO.Compression.ZipFile‘ muss ‚System implementieren. IDisposable '

' System.IO.Compression.ZipFile 'hat keine Konstruktoren. Ich stellte sicher, ich den richtigen .NET Framework verwende und ich bin mit .NET 4.6 in VS System.IO.Compression und System.IO.Compression.Filesystem dann:

Nach über diese Website Suche fand ich heraus, hatte ich einige Referenzen hinzufügen, die ich habe ich hinzugefügt 2013. Ich bin fest, was zu tun ist, alles, was ich wollte, war mehrere Dateien aus einem Ordner zu zippen, aber ich kann ZipFile nicht verwenden. Irgendwelche Informationen darüber, wo das zu sehen ist, werden sehr geschätzt.

Der Code Ich verwende ist:

Dim ZipToCreate As String = "ex1.zip" 
Dim DirectoryToZip As String = "c:\temp" 
Using zip As ZipFile = New ZipFile 
    Dim filenames As String() = System.IO.Directory.GetFiles(DirectoryToZip) 
    Dim filename As String 
    For Each filename In filenames 
     zip.AddFile(filename) 
    Next 
    zip.Save(ZipToCreate) 
End Using 

aus diesem Beispiel ->how to Zip files in vb.net 2005

Antwort

1

Du Vertauschen 2 verschiedene "ZipFile" APIs.

Der Beispielcode, den Sie kopiert haben, erwartet, dass Sie einen Verweis auf die Bibliothek DotNetZip haben, um die ZipFile-Klasse zu verwenden, die nicht Teil von .NET Framework ist.

Das .NET Framework selbst hat auch eine ZipFile Klasse, aber mit einer anderen API, auf die sich Ihr Code gerade bezieht.

Wählen Sie aus, welche Sie verwenden möchten, und stellen Sie sicher, dass Sie auf die richtigen Bibliotheken verweisen, und lesen Sie die entsprechende Dokumentation, um sie richtig zu codieren.

+0

Vielen Dank für die Antwort, ich bin immer noch ein Anfänger mit vb so tut mir leid, wenn das eine dumme Frage ist: also wenn ich DotNetZip referenzieren möchte, müsste ich es nur richtig herunterladen? und wenn Sie eine andere API sagen, wie würde ich wissen, welche .NET verwendet? – sammie91

+0

Ja, Sie müssen es herunterladen oder es auf NuGet bekommen, wenn es dort verfügbar ist. Was die andere API betrifft, habe ich nicht über die .NET-Version gesprochen, die ich nicht für relevant halte, wenn Sie 'DotNetZip' verwenden. Mit verschiedenen APIs habe ich nur gesagt, dass die integrierte .NET Framework 'ZipFile'-Klasse nicht die gleichen Methoden wie die' ZipFile' hat, die in der 'DotNetZip'-Bibliothek definiert ist, also können Sie sie natürlich nicht verwenden gleicher Weg. Die Klassennamen sind gleich, aber sie sind tatsächlich sehr unterschiedlich. – sstan

+0

Das macht Sinn, vielen Dank! Also, wenn ich es lade und es in meinem Visual Studio nutze, wäre jemand anderes in der Lage, mein Projekt auf seinem zu verwenden, wenn sie dotnetzip nicht installiert haben? Weil ich das hier aufbaue und es dem Hauptserver hinzufügen möchte, aber ich weiß nicht, ob jemand anderes es benutzen könnte, möchte ich deine Antwort als die Antwort bestätigen, die ich tue, indem ich einfach das Häkchen richtig überprüfe? danke nochmal – sammie91

0

Die Fehler klar sagen, dass Sie nicht Using mit einer Klasse verwenden können, die nicht IDisposable nicht implementiert, und dass Sie keine Instanz von ZipFile erstellen können, da es keine Konstruktoren hat. Wenn Sie die MSDN documentation lesen, werden Sie sehen, dass die ZipFile Klasse nur statische Methoden hat. Sie war es, alle Dateien in DirectoryToZip in eine Zip-Datei zip genannt ZipToCreate ist:

ZipFile.CreateFromDirectory(DirectoryToZip, ZipToCreate) 
Verwandte Themen