ZIP, itkisiz məlumat sıxılması dəstəkləyən arxiv fayl formatıdır. ZIP faylı bir və ya bir neçə fayl və ya qovluqdan ibarət ola bilər və bu fayllar sıxılmış ola bilər. ZIP faylları adətən .zip və ya .ZIP uzantılarını və application/zip MIME tipini istifadə edir. ZIP, bir çox proqram tərəfindən əsas fayl formatı kimi, adətən fərqli ad altında istifadə olunur. İstifadəçi interfeysi vasitəsilə fayl sistemində naviqasiya edərkən, ZIP fayllarını təmsil edən qrafik ikonalar tez-tez sənəd və ya digər obyekt kimi, üzərində bağlayıcı (zipper) simvolu ilə göstərilir.
Faylları zip (sıxmaq) üçün faylları zip (sıxmaq) üçün bir neçə yol
mövcuddur, bu, istifadə etdiyiniz əməliyyat sistemindən asılıdır. Hər gün bir neçə faylı zip və ya unzip edib onları saxlama serveri və ya fayl paylaşım platformasına göndərməliyik. Xoşbəxtlikdən, bu prosesi Aspose.ZIP API
ilə avtomatlaşdıra bilərik. Bu API, faylları əsas fayl strukturu ilə məşğul olmadan sıxmağa və açmağa imkan verir. Bu məqalədə tək və çoxlu fayl sıxılması nümunələri göstərilir.
Aspose.ZIP paketini .NET layihənizə əlavə etmək üçün aşağıdakı NuGet əmrindən istifadə edin:
PM> Install-Package Aspose.Zip
C# ilə tək faylı necə sıxmaq olar
- İlk öncə çıxış ZIP arxivi üçün bir FileStream sinifi
obyekti yaratmalıyıq.
- FileStream
obyektinə tək faylı yükləyin.
- Archive sinifi
obyektini yaradın.
- Faylı Archive.CreateEntry
(“FileName”, FileStream) metodu ilə arxivə əlavə edin.
- ZIP arxivini Archive.Save
(FileStream) metodu ilə yaradın.
using (FileStream zipFile = File.Open(dataDir + "CompressSingleFile_out.zip", FileMode.Create))
{
// Arxivə əlavə ediləcək fayl
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# ilə bir neçə faylı sıxmaq
Tək faylı sıxmaqla çoxlu faylları sıxmaq arasındakı fərq ondadır ki, bir neçə faylı FileStream‑ə yükləməli və hamısını Archive.CreateEntry(“FileName”, FileStream) metodu ilə ZIP arxivinə əlavə etməliyik. Aşağıdakı kod nümunəsi bir neçə faylı FileStream vasitəsilə ZIP‑ə necə əlavə etməyi göstərir.
// Çıxış ZIP arxivi üçün FileStream yaradılır
using (FileStream zipFile = File.Open("compressed_files.zip", FileMode.Create))
{
// Arxivə əlavə ediləcək fayl
using (FileStream source1 = File.Open("alice29.txt", FileMode.Open, FileAccess.Read))
{
// Arxivə əlavə ediləcək ikinci fayl
using (FileStream source2 = File.Open("asyoulike.txt", FileMode.Open, FileAccess.Read))
{
using (var archive = new Archive())
{
// Fayllar arxivə əlavə olunur
archive.CreateEntry("alice29.txt", source1);
archive.CreateEntry("asyoulik3.txt", source2);
// Fayllar ZIP‑ə əlavə olunur
archive.Save(zipFile, new ArchiveSaveOptions() { Encoding = Encoding.ASCII, ArchiveComment = "iki fayl bu arxivdə sıxılmışdır" });
}
}
}
}
FileInfo sinifi ilə faylları sıxmaq
Fayllar FileInfo sinifi vasitəsilə də yüklənə və əvvəlki kimi ZIP arxivinə əlavə oluna bilər. FileInfo sinifi faylların yaradılması, kopyalanması, silinməsi, köçürülməsi və açılması üçün xüsusiyyətlər və nümunə metodlar təqdim edir və FileStream obyektlərinin yaradılmasına kömək edir.
using (FileStream zipFile = File.Open("compressed_files.zip", FileMode.Create))
{
// Arxivə əlavə ediləcək fayllar
FileInfo fi1 = new FileInfo("alice29.txt");
FileInfo fi2 = new FileInfo("fields.c");
using (var archive = new Archive())
{
// Fayllar arxivə əlavə olunur
archive.CreateEntry("alice29.txt", fi1);
archive.CreateEntry("fields.c", fi2);
// ZIP arxivi yaradılır
archive.Save(zipFile, new ArchiveSaveOptions() { Encoding = Encoding.ASCII });
}
}
Sıxılmadan arxivə faylları saxlamaq
// Faylları sıxmadan ZIP arxivi yaradır
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#‑də şifrə ilə ZIP faylları yaratmaq
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 parametri şifrə ilə qorunan ZIP arxivinin yaradılması üçün istifadə olunur.
C#‑də şifrə ilə ZIP fayllarını açmaq
using (var archive = new Archive("input_archive.zip", new ArchiveLoadOptions{DecryptionPassword = "pass"}))
{
archive.ExtractToDirectory("\\outputDirectory");
}
ArchiveLoadOptions‑un DecryptionPassword xüsusiyyəti şifrə ilə qorunan ZIP arxivini açmaq üçün istifadə edilir.
Tam nümunələr və data faylları üçün https://github.com/aspose-zip/Aspose.ZIP-for-.NET
ünvanına keçin.
ZIP arxivində LZMA sıxılmasından istifadə
Lempel–Ziv–Markov zənciri alqoritmi (LZMA) itkisiz məlumat sıxılması üçün istifadə olunan bir alqoritmdir. LZMA lüğət‑əsaslı sıxma alqoritmi tətbiq edir və sıxılmış axın bitlərdən ibarət olur. ZIP arxivində LZMA sıxması ZIP konteynerlərinin LZMA‑sıxılmış girişləri saxlamasına imkan verir. Aşağıdakı kod nümunəsi Aspose.ZIP API
vasitəsilə LZMA sıxmasının tətbiqini göstərir.
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 arxivində BZip2 sıxılmasından istifadə
bzip2, Burrows–Wheeler alqoritmini istifadə edən pulsuz və açıq mənbəli fayl sıxma proqramıdır. O, yalnız tək faylları sıxır və arxivləşdirici deyil. Julian Seward tərəfindən yaradılıb, Mark Wielaard və Micah Snyder tərəfindən dəstəklənir. Aşağıdakı kod nümunəsi Aspose.ZIP API
vasitəsilə BZip2 sıxmasının tətbiqini göstərir.
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 arxivində PPMd sıxılmasından istifadə
Partial Matching (PPM) proqnozlaşdırma, kontekst modelləşdirməsi və proqnozlaşdırmaya əsaslanan adaptiv statistik məlumat sıxma texnikasıdır. PPM modelləri, sıxılmamış simvol axınında əvvəlki simvolların dəstindən istifadə edərək növbəti simvolu proqnozlaşdırır. PPM alqoritmləri həmçinin klaster analizində verilənləri proqnozlaşdırılmış qruplara bölmək üçün istifadə edilə bilər. Aşağıdakı kod nümunəsi Aspose.ZIP API
vasitəsilə PPMd sıxmasının tətbiqini göstərir.
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);
}
}
Tək fayl ilə arxivi açmaq
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}% dekompressiya edildi", percent));
percentReady = percent;
}
};
archive.Entries[0].Extract(dataDir + "alice_extracted_out.txt");
}
}
Çoxlu fayl ilə arxivi açmaq
using (FileStream zipFile = File.Open(dataDir + "CompressMultipleFiles_out.zip", FileMode.Open))
{
StringBuilder sb = new StringBuilder("Girişlər: ");
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}% dekompressiya edildi", 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);
}
// Decompress edilmiş axından fayla yazılır.
}
}
percentReady = 0;
archive.Entries[1].Extract(dataDir + "asyoulik_extracted_out.txt");
}
}
Sıxılmadan saxlanılmış arxivi çıxarmaq
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);
}
// Decompress edilmiş axından fayla yazılır.
}
}
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);
}
// Decompress edilmiş axından fayla yazılır.
}
}
}
}
Tam nümunələr və data faylları üçün https://github.com/aspose-zip/Aspose.ZIP-for-.NET
ünvanına keçin.