Ich zippen gerne mehrere Dateien, die dynamisch in meiner Webanwendung erstellt werden. Diese Dateien sollten gezippt werden. Aus diesem Grund möchte ich keine Tools von Drittanbietern verwenden. genau wie .net api in C#Wie zip mehrere Dateien mit nur. NET-API in C#
Antwort
http://www.codeplex.com/DotNetZip Quellcodes zur Verfügung verwenden, so können Sie sehen, wie sie es tun und similiar etwas schreiben für sich selbst
Check out System.IO.Compression.DeflateStream. Youll finden ein paar Beispiele auf msdn http://msdn.microsoft.com/en-us/library/system.io.compression.deflatestream.aspx
Ich bin nicht sicher, was Sie meinen, indem Sie nicht wollen, dritte Partei Werkzeuge zu verwenden, aber ich nehme an, dass Sie nicht wollen, dass einige böse Interop programmatisch durch ein anderes Stück tun von Software.
Ich empfehle ICSharpCode SharpZipLib
Verwendung Dies kann als Referenz DLL zu einem Projekt hinzugefügt werden und ist recht unkompliziert ZIP-Dateien zum Erstellen und sie zu lesen.
SharpZipLib ist gut (+1), aber Sie können es nativ in. Net jetzt tun - siehe @Ruben Bartelinks Antwort – Keith
@Keith - nur wenn Sie auf .Net 3.0 + – cjk
Er zog nicht schließen Sie .NET 3 aus, und es ist kaum so groß wie das Erzwingen einer Bewegung von .NET 1.1 zu 2.0 - Obwohl SharpZipLib eine gute Bibliothek ist, die stark benutzt wird (inc von mir) –
Verwenden Sie System.IO.Packaging in .NET 3.0+.
See this introduction to System.IO.Packaging
Wenn Sie eine .NET 4.5 Abhängigkeit zu nehmen sind in der Lage, gibt es eine System.IO.Compression.ZipArchive in diesem Universum; Siehe walkthrough article here
Nur eine Anmerkung: Dies ist die hässlichste API überhaupt zum Zippen. – Cheeso
Sie könnten immer eine ausführbare Datei von Drittanbietern wie 7-zip mit einer geeigneten Befehlszeile mithilfe der System.Diagnostics.Process-Klasse aufrufen. Es gibt keine Interop auf diese Weise, weil Sie nur das Betriebssystem bitten, eine Binärdatei zu starten.
DotNetZip ist der Weg zu gehen (dotnetzip.codeplex.com) ... nicht versuchen, die .NET-Packaging-Bibliothek .. zu schwer zu bedienen und die [Content_Types] .xml, dass es dort stört mich.
Mit der Veröffentlichung von .NET Framework 4.5 ist dies jetzt viel einfacher mit den Updates zu System.IO.Compression, die die ZipFile class hinzufügt. Es gibt eine gute walk-through on codeguru; jedoch sind die Grundlagen im Einklang mit dem folgenden Beispiel:
using System.Collections.Generic;
using System.IO;
using System.IO.Compression;
using System.IO.Compression.FileSystem;
namespace ZipFileCreator
{
public static class ZipFileCreator
{
/// <summary>
/// Create a ZIP file of the files provided.
/// </summary>
/// <param name="fileName">The full path and name to store the ZIP file at.</param>
/// <param name="files">The list of files to be added.</param>
public static void CreateZipFile(string fileName, IEnumerable<string> files)
{
// Create and open a new ZIP file
var zip = ZipFile.Open(fileName, ZipArchiveMode.Create);
foreach (var file in files)
{
// Add the entry for each file
zip.CreateEntryFromFile(file, Path.GetFileName(file), CompressionLevel.Optimal);
}
// Dispose of the object when we are done
zip.Dispose();
}
}
}
Wie mache ich das, wenn ich die Dateien (Blobs) von der Datenbank bekomme? – Seth
@Seth würden Sie wahrscheinlich einige I/O tun müssen. Deserialisieren Sie das Blob zurück in Bytes, schreiben Sie die Bytes in die Datei und übergeben Sie dann den vollständigen Dateipfad in diese Methode als eine der Dateien in 'IEnumerable
Nun Sie die Dateien folgende Funktion zip können Sie müssen nur die Datei Bytes übergeben und diese Funktion wird die Datei Bytes übergeben als Parameter zip und gebe die gezippten Dateibytes zurück.
public static byte[] PackageDocsAsZip(byte[] fileBytesTobeZipped, string packageFileName)
{
try
{
string parentSourceLoc2Zip = @"C:\\\\UploadedDocs"\SG-ACA OCI Packages";
if (Directory.Exists(parentSourceLoc2Zip) == false)
{
Directory.CreateDirectory(parentSourceLoc2Zip);
}
//if destination folder already exists then delete it
string sourceLoc2Zip = string.Format(@"{0}\{1}", parentSourceLoc2Zip, packageFileName);
if (Directory.Exists(sourceLoc2Zip) == true)
{
Directory.Delete(sourceLoc2Zip, true);
}
Directory.CreateDirectory(sourceLoc2Zip);
FilePath = string.Format(@"{0}\{1}",
sourceLoc2Zip,
"filename.extension");//e-g report.xlsx , report.docx according to exported file
File.WriteAllBytes(FilePath, fileBytesTobeZipped);
//if zip already exists then delete it
if (File.Exists(sourceLoc2Zip + ".zip"))
{
File.Delete(sourceLoc2Zip + ".zip");
}
//now zip the source location
ZipFile.CreateFromDirectory(sourceLoc2Zip, sourceLoc2Zip + ".zip", System.IO.Compression.CompressionLevel.Optimal, true);
return File.ReadAllBytes(sourceLoc2Zip + ".zip");
}
catch
{
throw;
}
}
Nun, wenn Sie dieses Zip-Bytes für Benutzer erstellt exportieren mögen Sie herunterladen können diese Funktion mit folgenden Zeilen
Response.Clear();
Response.AddHeader("content-disposition", "attachment; filename=Report.zip");
Response.ContentType = "application/zip";
Response.BinaryWrite(PackageDocsAsZip(fileBytesToBeExported ,"TemporaryFolderName"));
Response.End();
einfache Zip-Datei mit flacher Struktur:
using System.IO;
using System.IO.Compression;
private static void CreateZipFile(IEnumerable<FileInfo> files, string archiveName)
{
using (var stream = File.OpenWrite(archiveName))
{
using (ZipArchive archive = new ZipArchive(stream, System.IO.Compression.ZipArchiveMode.Create))
{
foreach (var item in files)
{
archive.CreateEntryFromFile(item.FullName, item.Name, CompressionLevel.Optimal);
}
}
}
}
Sie müssen einen Verweis auf System.IO.Compression und System.IO.Compression.FileSystem hinzufügen.
- 1. Wie mehrere ZIP-Dateien in HDFS entpacken
- 2. C# erstellen ZIP-Archiv mit mehreren Dateien
- 3. Zip-Dateien in FSharp?
- 4. Zip-Dateien in PHP
- 5. Laden Sie mehrere Dateien als zip-Datei mit PHP
- 6. Windows Batch zu Zip-Dateien mit. Zip-Erweiterung
- 7. Laden Sie mehrere Dateien als Zip-Ordner mit php
- 8. Wie Dateien zip aber die Vorhefte
- 9. Wie nur MP3-Dateien aus einem ZIP-Archiv
- 10. In Linux, zip mehrere Verzeichnisse in einer named Zip-Datei
- 11. mehrere js Dateien mit nur einer Taste
- 12. Zip erstellen in C#
- 13. Datei Extractor bringt alle Dateien statt nur Zip-Datei
- 14. Wie archiviere ich mehrere Dateien mit scala in eine .zip-Datei?
- 15. Python - Suche nach Dateien & ZIP, über mehrere Verzeichnisse hinweg
- 16. Zip-Verzeichnis mit Python
- 17. Zip letzte festgeschriebene Änderungen nur
- 18. Zip einschließlich versteckte Dateien
- 19. C# Webclient mehrere Dateien
- 20. Thread in zip-Dateien herunterladen
- 21. Wie entpacke ich ZIP-Dateien mit der WinRAR-Befehlszeile?
- 22. Einen .Zip-Eintrag nur mit C#/.NET umbenennen?
- 23. Erstellen von Zip-Dateien aus dem Speicher-Stream C#
- 24. Java util zip erstellt "beschädigte" Zip-Dateien
- 25. Zip-Dateien in vb.net 2005
- 26. Wie man Dateien in ein Zip-Archiv mit Python-Zip-Datei einfügt
- 27. Kompilieren mehrere C-Dateien mit make
- 28. SharpZipLib ~ Wie bestimmte Dateien aus einem Zip-
- 29. PHP-Liste nur Dateien innerhalb Zip-Archiv (Ordner ausschließen)
- 30. Python Zipfile mehrere Dateien
Deflate ist nicht ZIP. Es gibt auch GZipStream, aber es ist auch nicht ZIP. – Ray
True, aber Sie können immer noch mehrere Dateien zusammen zum Senden komprimieren. Sarathi fragte nach etwas, das in .net eingebaut war.Und das ist eine Sache, die. Net bietet – Marcom