ZIP, kayıpsız veri sıkıştırmasını destekleyen bir arşiv dosya formatıdır. Bir ZIP dosyası, sıkıştırılmış bir veya daha fazla dosya ya da dizin içerebilir. ZIP dosyaları genellikle .zip veya .ZIP uzantılarını ve application/zip MIME tipini kullanır. ZIP, birçok program tarafından farklı bir ad altında temel dosya formatı olarak kullanılır. Bir dosya sisteminde kullanıcı arayüzü üzerinden gezinirken, ZIP dosyalarını temsil eden grafik simgeler genellikle bir belge ya da fermuar simgesi gibi belirgin bir nesne olarak gösterilir.
Dosyaları ziplemenin (sıkıştırmanın) birden fazla yolu
vardır; hangi işletim sistemini kullandığınıza bağlıdır. Neredeyse her gün bazı dosyaları zipleyip zipten çıkarıp bir depolama sunucusuna ya da dosya paylaşım platformuna göndermemiz gerekir. Neyse ki bu süreci Aspose.ZIP API
kullanarak otomatikleştirebiliriz. Bu API, dosyaları temel dosya yapısını düşünmeden sıkıştırıp açmanıza olanak tanır. Bu makale, tek ve birden fazla dosya sıkıştırma işlemlerinin nasıl yapılacağını gösterir.
Aspose.ZIP paketini .NET projenize aşağıdaki NuGet komutuyla ekleyebilirsiniz:
PM> Install-Package Aspose.Zip
C# ile tek dosyayı nasıl sıkıştırabilirsiniz
- İlk olarak çıktı ZIP arşivi için bir FileStream sınıfı
nesnesi oluşturmamız gerekir.
- Tek bir dosyayı FileStream
nesnesine yükleyin.
- Archive sınıfının
bir nesnesini oluşturun.
- Dosyayı,
Archive.CreateEntry("FileName", FileStream) yöntemiyle arşive ekleyin.
[Archive.Save](https://reference.aspose.com/zip/net/aspose.zip/archive/save/#save)(FileStream) yöntemiyle ZIP arşivini oluşturun.
using (FileStream zipFile = File.Open(dataDir + "CompressSingleFile_out.zip", FileMode.Create))
{
//File to be added to archive
using (FileStream source1 = File.Open(dataDir + "alice29.txt", FileMode.Open, FileAccess.Read))
{
using (var archive = new Archive(new ArchiveEntrySettings()))
{
archive.CreateEntry("alice29.txt", source1);
archive.Save(zipFile);
}
}
}
C# ile birden fazla dosyayı sıkıştırma
Tek bir dosya ile birden fazla dosyayı sıkıştırma arasındaki fark, daha fazla dosyayı FileStream’e yükleyip hepsini Archive.CreateEntry("FileName", FileStream) yöntemiyle ZIP arşivine eklememiz gerektiğidir.
Aşağıdaki kod örneği, FileStream kullanarak birden fazla dosyanın ZIP arşivine nasıl ekleneceğini gösterir.
// Create FileStream for output ZIP archive
using (FileStream zipFile = File.Open("compressed_files.zip", FileMode.Create))
{
// File to be added to archive
using (FileStream source1 = File.Open("alice29.txt", FileMode.Open, FileAccess.Read))
{
// File to be added to archive
using (FileStream source2 = File.Open("asyoulike.txt", FileMode.Open, FileAccess.Read))
{
using (var archive = new Archive())
{
// Add files to the archive
archive.CreateEntry("alice29.txt", source1);
archive.CreateEntry("asyoulik3.txt", source2);
// ZIP the files
archive.Save(zipFile, new ArchiveSaveOptions() { Encoding = Encoding.ASCII, ArchiveComment = "two files are compressed in this archive" });
}
}
}
}
FileInfo Sınıfı Kullanarak Dosyaları Sıkıştırma
Dosyalar, FileInfo sınıfı kullanılarak da yüklenebilir ve daha önceki gibi ZIP arşivine eklenebilir.
FileInfo sınıfı, dosyaların oluşturulması, kopyalanması, silinmesi, taşınması ve açılması için özellikler ve örnek yöntemler sağlar; ayrıca FileStream nesnelerinin oluşturulmasına yardımcı olur.
using (FileStream zipFile = File.Open("compressed_files.zip", FileMode.Create))
{
// Files to be added to archive
FileInfo fi1 = new FileInfo("alice29.txt");
FileInfo fi2 = new FileInfo("fields.c");
using (var archive = new Archive())
{
// Add files to the archive
archive.CreateEntry("alice29.txt", fi1);
archive.CreateEntry("fields.c", fi2);
// Create ZIP archive
archive.Save(zipFile, new ArchiveSaveOptions() { Encoding = Encoding.ASCII });
}
}
Dosyaları Sıkıştırma Olmadan Arşivlere Depolama
//Creates zip archive without compressing files
using (FileStream zipFile = File.Open(dataDir + "StoreMultipleFilesWithoutCompression_out.zip", FileMode.Create))
{
FileInfo fi1 = new FileInfo(dataDir + "alice29.txt");
FileInfo fi2 = new FileInfo(dataDir + "lcet10.txt");
using (Archive archive = new Archive(new ArchiveEntrySettings(new StoreCompressionSettings())))
{
archive.CreateEntry("alice29.txt", fi1);
archive.CreateEntry("lcet10.txt", fi2);
archive.Save(zipFile, new ArchiveSaveOptions() { Encoding = Encoding.ASCII });
}
}
C# ile şifreli ZIP dosyaları oluşturma
using (var archive = new Archive(new ArchiveEntrySettings(encryptionSettings: new TraditionalEncryptionSettings("pass"))))
{
archive.CreateEntry("entry_name1.dat", "input_file1.dat");
archive.CreateEntry("entry_name2.dat", "input_file2.dat");
archive.Save("result_archive.zip");
}
encryptionSettings parametresi, şifre korumalı bir ZIP arşivi oluşturmak için kullanılır.
C# ile şifreli ZIP dosyalarını açma
using (var archive = new Archive("input_archive.zip", new ArchiveLoadOptions{DecryptionPassword = "pass"}))
{
archive.ExtractToDirectory("\\outputDirectory");
}
ArchiveLoadOptions içindeki DecryptionPassword özelliği, şifre korumalı bir ZIP arşivini açmak için kullanılır.
Tam örnekler ve veri dosyaları için lütfen https://github.com/aspose-zip/Aspose.ZIP-for-.NET
adresine gidin.
ZIP Arşivinde LZMA Sıkıştırması Kullanma
Lempel–Ziv–Markov zinciri algoritması (LZMA), kayıpsız veri sıkıştırması gerçekleştiren bir algoritmadır. LZMA, sözlük sıkıştırma algoritması kullanır; sıkıştırılmış akış bir bit akışıdır. ZIP arşivi içinde LZMA sıkıştırması, ZIP konteynerlerinin LZMA sıkıştırılmış girişleri içermesine olanak tanır. Aşağıdaki kod örneği, Aspose.ZIP API
kullanarak LZMA sıkıştırmasının nasıl uygulanacağını gösterir.
using (FileStream zipFile = File.Open(dataDir + "LZMACompression_out.zip", FileMode.Create))
{
using (Archive archive = new Archive(new ArchiveEntrySettings(new LzmaCompressionSettings())))
{
archive.CreateEntry("sample.txt", dataDir + "sample.txt");
archive.Save(zipFile);
}
}
ZIP Arşivinde BZip2 Sıkıştırması Kullanma
bzip2, Burrows–Wheeler algoritmasını kullanan ücretsiz ve açık kaynaklı bir dosya sıkıştırma programıdır. Yalnızca tek dosyaları sıkıştırır ve bir dosya arşivleyici değildir. Julian Seward tarafından geliştirilmiş, Mark Wielaard ve Micah Snyder tarafından sürdürülmektedir. Aşağıdaki kod örneği, Aspose.ZIP API
kullanarak BZip2 sıkıştırmasının nasıl uygulanacağını gösterir.
using (FileStream zipFile = File.Open(dataDir + "Bzip2Compression_out.zip", FileMode.Create))
{
using (Archive archive = new Archive(new ArchiveEntrySettings(new Bzip2CompressionSettings())))
{
archive.CreateEntry("sample.txt", dataDir + "sample.txt");
archive.Save(zipFile);
}
}
ZIP Arşivinde PPMd Sıkıştırması Kullanma
Kısmi eşleşmeye dayalı tahmin (PPM), bağlam modellemesi ve tahmine dayalı uyarlanabilir istatistiksel bir veri sıkıştırma tekniğidir. PPM modelleri, sıkıştırılmamış sembol akışındaki önceki sembollerin bir kümesini kullanarak akıştaki bir sonraki sembolü tahmin eder. PPM algoritmaları ayrıca kümeleme analizinde verileri tahmini gruplara ayırmak için kullanılabilir. Aşağıdaki kod örneği, Aspose.ZIP API
kullanarak PPMd sıkıştırmasının nasıl uygulanacağını gösterir.
using (FileStream zipFile = File.Open(dataDir + "PPMdCompression_out.zip", FileMode.Create))
{
using (Archive archive = new Archive(new ArchiveEntrySettings(new PPMdCompressionSettings())))
{
archive.CreateEntry("sample.txt", dataDir + "sample.txt");
archive.Save(zipFile);
}
}
Tek Dosya ile Arşivi Açma
using (FileStream fs = File.OpenRead(dataDir + "CompressSingleFile_out.zip"))
{
using (Archive archive = new Archive(fs))
{
int percentReady = 0;
archive.Entries[0].ExtractionProgressed += (s, e) =>
{
int percent = (int)((100 * e.ProceededBytes) / ((ArchiveEntry)s).UncompressedSize);
if (percent > percentReady)
{
Console.WriteLine(string.Format("{0}% decompressed", percent));
percentReady = percent;
}
};
archive.Entries[0].Extract(dataDir + "alice_extracted_out.txt");
}
}
Birden Fazla Dosya ile Arşivi Açma
using (FileStream zipFile = File.Open(dataDir + "CompressMultipleFiles_out.zip", FileMode.Open))
{
StringBuilder sb = new StringBuilder("Entries are: ");
int percentReady = 0;
using (Archive archive = new Archive(zipFile,
new ArchiveLoadOptions()
{
EntryListed = (s, e) => { sb.AppendFormat("{0}, ", e.Entry.Name); },
EntryExtractionProgressed = (s, e) =>
{
int percent = (int)((100 * e.ProceededBytes) / ((ArchiveEntry)s).UncompressedSize);
if (percent > percentReady)
{
Console.WriteLine(string.Format("{0}% compressed", percent)); percentReady = percent;
}
}
}))
{
Console.WriteLine(sb.ToString(0, sb.Length - 2));
using (var extracted = File.Create(dataDir + "alice_extracted_out.txt"))
{
using (var decompressed = archive.Entries[0].Open())
{
byte[] buffer = new byte[8192];
int bytesRead;
while (0 < (bytesRead = decompressed.Read(buffer, 0, buffer.Length)))
{
extracted.Write(buffer, 0, bytesRead);
}
// Read from decompressed stream to extracting file.
}
}
percentReady = 0;
archive.Entries[1].Extract(dataDir + "asyoulik_extracted_out.txt");
}
}
Sıkıştırma Olmadan Depolanmış Arşivi Çıkarma
using (FileStream zipFile = File.Open(dataDir + "StoreMultipleFilesWithoutCompression_out.zip", FileMode.Open))
{
using (Archive archive = new Archive(zipFile))
{
using (var extracted = File.Create(dataDir + "alice_extracted_store_out.txt"))
{
using (var decompressed = archive.Entries[0].Open())
{
byte[] buffer = new byte[8192];
int bytesRead;
while (0 < (bytesRead = decompressed.Read(buffer, 0, buffer.Length)))
{
extracted.Write(buffer, 0, bytesRead);
}
// Read from decompressed stream to extracting file.
}
}
using (var extracted = File.Create(dataDir + "asyoulik_extracted_store_out.txt"))
{
using (var decompressed = archive.Entries[1].Open())
{
byte[] buffer = new byte[8192];
int bytesRead;
while (0 < (bytesRead = decompressed.Read(buffer, 0, buffer.Length)))
{
extracted.Write(buffer, 0, bytesRead);
}
// Read from decompressed stream to extracting file.
}
}
}
}
Tam örnekler ve veri dosyaları için lütfen https://github.com/aspose-zip/Aspose.ZIP-for-.NET
adresine gidin.