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)

Bir yanıt yazın