2010-03-09 11 views
8

ज़िप फ़ाइल में पथ को अनदेखा करते हुए किसी दिए गए फ़ोल्डर में फ़ाइलों को निकालने का प्रयास करना लेकिन ऐसा कोई प्रतीत नहीं होता है।डॉटनेटजिप: फ़ाइलों को निकालने के लिए कैसे, लेकिन ज़िपफाइल में पथ को अनदेखा कर रहे हैं?

यह वहां लागू सभी अन्य अच्छी चीजों को देखते हुए एक काफी बुनियादी आवश्यकता प्रतीत होता है।

मुझे क्या याद आ रही है?

कोड है -

using (Ionic.Zip.ZipFile zf = Ionic.Zip.ZipFile.Read(zipPath)) 
{ 
    zf.ExtractAll(appPath); 
} 
+0

मैं एक ऐसी ही समाधान के लिए देख रहा हूँ, लेकिन मैं केवल सभी फाइलों को सामग्री का पहला कदम दूर करने के लिए चाहते हैं ... जैसे/मेरी समाधान/फ़ाइल/file1.txt हो जाता है/फ़ाइल/file1.txt। इसके लिए कोई संसाधन? – atwellpub

उत्तर

12

आप अनज़िप करने से तुरंत पहले फ़ाइल नाम की सूची हिस्से को हटाने की आवश्यकता होगी ...

using (var zf = Ionic.Zip.ZipFile.Read(zipPath)) 
{ 
    zf.ToList().ForEach(entry => 
    { 
     entry.FileName = System.IO.Path.GetFileName(entry.FileName); 
     entry.Extract(appPath); 
    }); 
} 
+0

दोह! उस बारे में नहीं सोचा :) बहुत धन्यवाद – Kumar

+0

मुझे एक त्रुटि मिलती है जो कहती है "संपत्ति या सूचक केवल पढ़ने के लिए" ...... मदद करें! – pek

+0

क्या यह नेस्टेड निर्देशिकाओं के साथ काम करता है? –

1

अगर वहाँ बराबर के साथ 2 फ़ाइलें हैं असफल हो जायेगी कि फ़ाइल नाम। उदाहरण के लिए फ़ाइलें \ additionalfiles \ अस्थायी \ file1.txt file1.txt

पहले फ़ाइल ज़िप फ़ाइल में file1.txt करने के लिए और जब दूसरी फ़ाइल एक अपवाद का नाम बदलने की कोशिश कर रहा है कह फेंक दिया जाता है एक है कि में बदल दिया जाएगा एक ही कुंजी के साथ आइटम पहले से ही

18

आप इसे Extract() या ExtractAll() को किसी विशिष्ट कॉल निर्दिष्ट नहीं कर सकते जबकि मौजूद है, ZipFile वर्ग एक FlattenFoldersOnExtract क्षेत्र है।

var flattenFoldersOnExtract = zip.FlattenFoldersOnExtract; 
zip.FlattenFoldersOnExtract = true; 
zip.ExtractAll(); 
zip.FlattenFoldersOnExtract = flattenFoldersOnExtract; 
+4

यह स्वीकार्य उत्तर होना चाहिए ([डोंटनेटजिप डॉक्टर] (http://dotnetzip.herobo.com/DNZHelp/html/4970c6e8-c169-3ecc-b5f2-8ba9b354c51d.htm))। दूसरा जवाब एक वर्कअराउंड है: इसे निकालने से पहले ज़िप के अंदर फ़ाइल का नाम बदलता है। –

0

आप अधिभार कि एक पैरामीटर के रूप एक धारा लेता है का उपयोग कर सकते हैं: सही पर सेट किया जाता है, यह एक फ़ोल्डर में सभी निकाले फ़ाइलों सपाट। इस तरह आपके पास पथ का पूरा नियंत्रण है जहां फाइलों को निकाला जाएगा।

उदाहरण:

using (ZipFile zip = new ZipFile(ZipPath)) 
{ 
    foreach (ZipEntry e in zip) 
    { 
     string newPath = Path.Combine(FolderToExtractTo, e.FileName); 

     if (e.IsDirectory) 
     { 
      Directory.CreateDirectory(newPath); 
     } 
     else 
     { 
      using (FileStream stream = new FileStream(newPath, FileMode.Create)) 
      e.Extract(stream); 
     } 
    } 
} 
संबंधित मुद्दे

 संबंधित मुद्दे