SORU
3 ŞUBAT 2009, Salı


Bir Zip arşiv dosyaları Program aracılığıyla kullanarak ayıklamak C# ve Sistemi.IO.Ambalaj

Bazı hiyerarşik yapılanma ve çıkarma muhtaç olan ZİP dosyaları bir grup var. Ne yapabilirim, şu anda, dizin yapısı oluşturmak ve uygun konuma zip dosyaları taşıyın. Kaçırdığım mistik peynir ZİP arşiv dosyaları ayıklar parçasıdır.

MSDN ZipArchive sınıf makaleler gördüm ve onları makul iyi anlıyorum. Ayrıca VBScript ways to extract gördüm. Bu çıkarma olayı oldukça basit olmalı çok karmaşık bir sınıf değil. Bu gerçekten çalışıyor "". çoğunlukla Başvuru için aşağıda benim şu anki kod ekledim.

 using (ZipPackage package = (ZipPackage)Package.Open(@"..\..\test.zip", FileMode.Open, FileAccess.Read))
 {
    PackagePartCollection packageParts = package.GetParts();
    foreach (PackageRelationship relation in packageParts)
    {
       //Do Stuff but never gets here since packageParts is empty.
    }
 }

Sorun bir yere GetParts (ya da bu konuda*bir Şey* Olsun) gibi görünüyor. Açık paket boş gibi görünüyor. Derin kazma hata ayıklayıcı özel üye _zipArchive aslında parçaları olduğunu göstermiştir. Doğru isimler ve her şeyi parçalar. Neden GetParts işlevi onları almak değil mi? Bir ZipArchive için açık döküm çalıştım'ver ve yardım etmedi. Grrr.

CEVAP
10 ŞUBAT 2009, Salı


Eğer ZİP dosyaları yönetmek, yardım etmek için 3. parti bir kütüphane içine bakmak isteyebilirsiniz.

Örneğin, son zamanlarda yükseltilen DotNetZip,. Anki sürümü v1.8. Burada bir posta oluşturmak için bir örnek:

using (ZipFile zip = new ZipFile())
{
  zip.AddFile("c:\\photos\\personal\\7440-N49th.png");
  zip.AddFile("c:\\Desktop\\2005_Annual_Report.pdf");
  zip.AddFile("ReadMe.txt");

  zip.Save("Archive.zip");
}

İşte bir örnekgüncellemevarolan bir posta, dosyalar bunu ayıklamak gerek yok:

using (ZipFile zip = ZipFile.Read("ExistingArchive.zip"))
{
  // 1. remove an entry, given the name
  zip.RemoveEntry("README.txt");

  // 2. Update an existing entry, with content from the filesystem
  zip.UpdateItem("Portfolio.doc");

  // 3. modify the filename of an existing entry 
  // (rename it and move it to a sub directory)
  ZipEntry e = zip["Table1.jpg"];
  e.FileName = "images/Figure1.jpg";

  // 4. insert or modify the comment on the zip archive
  zip.Comment = "This zip archive was updated "   System.DateTime.ToString("G"); 

  // 5. finally, save the modified archive
  zip.Save();
}

işte girdileri ayıklayan bir örnek:

using (ZipFile zip = ZipFile.Read("ExistingZipFile.zip"))
{
  foreach (ZipEntry e in zip)
  {
    e.Extract(TargetDirectory, true);  // true => overwrite existing files
  }
}

DotNetZip dosya, Zip şifreleme multi-byte karakter desteği, AES şifreleme, akarsular, Unicode, kendiliğinden açılan arşivler. Ayrıca dosya uzunlukları için ZİP64, 0xFFFFFFFF veya birden fazla 65535 girişleri ile arşivler için daha büyük yapar.

ücretsiz. açık kaynak

olsun codeplex

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Liberator

    Liberator

    14 EYLÜL 2007
  • NewsyTech

    NewsyTech

    2 AĞUSTOS 2010
  • Theodore Leaf

    Theodore Lea

    29 AĞUSTOS 2006