.NET 10.0'daki yenilikler [28]: Eşzamansız ZIP işlemleri

kapanış bildirimi

Bu makale İngilizce olarak da mevcuttur. Teknik yardımla tercüme edildi ve yayınlanmadan önce editoryal olarak gözden geçirildi.

ZIP sıkıştırması, klasik .NET Framework 4.5'ten başlayarak .NET temel sınıf kitaplığında ve .NET Core sürüm 1.0'dan başlayarak modern .NET'te mevcuttur.

Duyurudan sonra devamını okuyun

Dr. Holger Schwichtenberg, 53 tanınmış uzmanıyla çok sayıda orta ve büyük ölçekli şirketi danışmanlık, eğitim ve yazılım geliştirme yoluyla destekleyen www.IT-Visions.de uzman ağının teknik direktörüdür. Çok sayıda ulusal ve uluslararası konferansa katılımı, 90'dan fazla uzmanlık kitabı ve 1.500'den fazla uzmanlık makalesi sayesinde Holger Schwichtenberg, .NET ve web teknolojileri konusunda Almanya'nın en tanınmış uzmanlarından biridir.

.NET 10.0 Preview 4'ten itibaren sınıflar artık kullanılabilir System.IO.Compression.ZipFile, System.IO.Compression.ZipArchive VE System.IO.Compression.ZipEntry mevcut eşzamanlı yöntemlerin eşzamansız karşılıkları. Yeni özellikler arasında diğerlerinin yanı sıra ExtractToDirectoryAsync(), ExtractToFileAsync(), CreateFromDirectoryAsync(), OpenAsync(), OpenReadAsync(), CreateAsync() VE CreateEntryFromFileAsync().

Aşağıdaki kod, eşzamansız ZIP işlemlerinin birkaç örneğini gösterir:


class FCL10_Zip
{
 private const string ArchiveFileName = @"t:CTempArchive.zip";
 private const string SourceDirectoryName = @"c:temp";
 private const string DestinationDirectoryName = @"t:CTempArchiveExtract";
 private const string TempFileName = @"t:tempfile.pdf";
 
 public async Task Run()
 {
  CUI.Demo(nameof(FCL10_Zip));
 
  // Prüfe, ob die Datei existiert
  if (File.Exists(ArchiveFileName)) File.Delete(ArchiveFileName);
 
  #region ZIP-Dateien erstellen und extrahieren
  // ZIP erstellen
  await ZipFile.CreateFromDirectoryAsync(SourceDirectoryName, ArchiveFileName, CompressionLevel.SmallestSize, includeBaseDirectory: true, entryNameEncoding: Encoding.UTF8);
 
  // Prüfe, ob die Datei existiert
  if (File.Exists(ArchiveFileName)) CUI.Green("ZIP-Datei erstellt: " + ArchiveFileName);
  else CUI.Red("ZIP-Datei nicht erstellt: " + ArchiveFileName);
 
  // ZIP extrahieren
  await ZipFile.ExtractToDirectoryAsync(ArchiveFileName, DestinationDirectoryName, overwriteFiles: true);
 
  // Prüfe, ob das Verzeichnis existiert
  if (Directory.Exists(DestinationDirectoryName)) CUI.Green("Verzeichnis extrahiert: " + DestinationDirectoryName);
  else CUI.Red("Verzeichnis nicht extrahiert: " + DestinationDirectoryName);
  #endregion
 
  #region Lesen und Schreiben von Einträgen in eine ZIP-Datei
 
  using (var archiveStream = new FileStream(ArchiveFileName, FileMode.OpenOrCreate, FileAccess.ReadWrite))
  {
   await using (ZipArchive a = await ZipArchive.CreateAsync(archiveStream, ZipArchiveMode.Update, leaveOpen: false, entryNameEncoding: Encoding.UTF8))
   {
 
    // Suche die erste PDF-Datei in a.Entries
    var pdfFileEntry = a.Entries.Where(x => x.Name.EndsWith(".pdf")).FirstOrDefault();
    if (pdfFileEntry != null)
    {
     await pdfFileEntry.ExtractToFileAsync(destinationFileName: TempFileName, overwrite: true);
 
     await using Stream entryStream = await pdfFileEntry.OpenAsync();
 
     ZipArchiveEntry createdEntry = await a.CreateEntryFromFileAsync(sourceFileName: TempFileName, entryName: "Doppelt_" + pdfFileEntry.Name);
     CUI.Green("Erste PDF-Datei wurde verdoppelt: " + pdfFileEntry.Name);
    }
   }
  }
  #endregion
 }
}


(Ben)


Yayımlandı

kategorisi

yazarı:

Etiketler:

Yorumlar

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir