2010-11-22 18 views
9

मैं ICSharpCode.SharpZipLib.Zip.FastZip उपयोग कर रहा हूँ फ़ाइलें ज़िप करने फ़ाइलें ज़िप करने नहीं ICSharpCode.SharpZipLib.Zip.FastZip लेकिन मैं एक समस्या पर अटक कर रहा हूँ:उनके फ़ाइल नाम में विशेष वर्ण होने

जब मैं विशेष वर्ण के साथ एक फ़ाइल ज़िप करने की कोशिश अपने फ़ाइल नाम में, यह काम नहीं करता है। यह तब काम करता है जब फ़ाइल नाम में कोई विशेष वर्ण नहीं होता है।

+0

जब आप कहते हैं कि यह काम नहीं करता है, _what_ काम नहीं करता है? क्या आप अपना कोड और त्रुटि संदेश पोस्ट कर सकते हैं? –

+0

यह उस फ़ाइल को ज़िप नहीं करता है, मुझे भी कोई त्रुटि नहीं मिल रही है – BreakHead

+0

क्या यह विशेष वर्णों के बिना काम करता है? –

उत्तर

0

संभावना 1: आप regex फ़ाइल फ़िल्टर में फ़ाइल नाम पास कर रहे हैं।

संभावना 2: उन अक्षरों ज़िप फ़ाइलों में अनुमति नहीं है (या कम से कम SharpZipLib इतना सोचता है)

6

मुझे लगता है कि आप FastZip उपयोग नहीं कर सकते। आप फ़ाइलों पुनरावृति और प्रविष्टियों अपने आप को जोड़ निर्दिष्ट करने की जरूरत है:

entry.IsUnicodeText = true;

SharpZipLib बताने के लिए प्रवेश यूनिकोड है।

string[] filenames = Directory.GetFiles(sTargetFolderPath); 

// Zip up the files - From SharpZipLib Demo Code 
using (ZipOutputStream s = new 
    ZipOutputStream(File.Create("MyZipFile.zip"))) 
{ 
    s.SetLevel(9); // 0-9, 9 being the highest compression 

    byte[] buffer = new byte[4096]; 

    foreach (string file in filenames) 
    { 
     ZipEntry entry = new ZipEntry(Path.GetFileName(file)); 

     entry.DateTime = DateTime.Now; 
     entry.IsUnicodeText = true; 
     s.PutNextEntry(entry); 

     using (FileStream fs = File.OpenRead(file)) 
     { 
      int sourceBytes; 
      do 
      { 
       sourceBytes = fs.Read(buffer, 0, buffer.Length); 

       s.Write(buffer, 0, sourceBytes); 

      } while (sourceBytes > 0); 
     } 
    } 
    s.Finish(); 
    s.Close(); 
} 
+0

+1000, आईई वाल, यह बहुत अच्छा है। यह वही है जो मैं चाहता हूं। बहुत बहुत धन्यवाद। –

+0

@M_Mogharrabi अगर उत्तर में से एक ने वास्तव में आपकी समस्या का समाधान किया है तो आपको इसे स्वीकार करने के रूप में चिह्नित करना होगा। उदाहरण के लिए मैंने पोस्ट किया पालैंड के समान समाधान (बस स्क्रॉल करें), सिवाय इसके कि मैं तेज़ था :) – Salaros

+0

20 दिसंबर 2012 को 26 मार्च 2011 से पहले कैसे किया जाता है? और इस प्राचीन पोस्ट को फिर से खोलें क्यों? – Paaland

0

कोशिश फ़ाइल नाम से विशेष वर्ण बाहर निकालने के लिए, मैं, ई बदलें। अपने Filename.Replace("&", "&");

1

आप तो आप उपयोग कर सकते हैं

entry.IsUnicodeText = true; 

यहाँ स्निपेट (थोड़ा संशोधित) है डाउनलोड करने और SharpZipLib पुस्तकालय के नवीनतम संस्करण को संकलित करने के लिए है:

FileInfo file = new FileInfo("input.ext"); 
using(var sw = new FileStream("output.zip", FileMode.OpenOrCreate, FileAccess.ReadWrite)) 
{ 
    using(var zipStream = new ZipOutputStream(sw)) 
    { 
     var entry = new ZipEntry(file.Name); 
     entry.IsUnicodeText = true; 
     zipStream.PutNextEntry(entry); 

     using (var reader = new FileStream(file.FullName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) 
     { 
      byte[] buffer = new byte[4096]; 
      int bytesRead; 
      while ((bytesRead = reader.Read(buffer, 0, buffer.Length)) > 0) 
      { 
       byte[] actual = new byte[bytesRead]; 
       Buffer.BlockCopy(buffer, 0, actual, 0, bytesRead); 
       zipStream.Write(actual, 0, actual.Length); 
      } 
     } 
    } 
} 
2

आप का उपयोग जारी रख सकते हैं FastZip यदि आप चाहें, लेकिन आपको इसे ZipEntryFactory देने की आवश्यकता है जो s IsUnicodeText = true के साथ बनाता है।

var zfe = new ZipEntryFactory { IsUnicodeText = true }; 
var fz = new FastZip { EntryFactory = zfe }; 
fz.CreateZip("out.zip", "C:\in", true, null); 
संबंधित मुद्दे