पढ़ता है मेरे पास एक gzip फ़ाइल है जिसमें एक txt फ़ाइल है जिसे साफ़ करने की आवश्यकता है। मैं लाइन द्वारा GZipped फ़ाइल लाइन से पढ़ने के लिए और उसके बाद सभी एक शॉट इस तरह में एक निर्गम GZIP फाइल करने के लिए साफ सामग्री लिखने चाहते हैं:StreamReader के साथ GZipStream.ReadLine केवल पहली पंक्ति
void ExtractAndFix(string inputPath, string outputPath) {
StringBuilder sbLine = new StringBuilder();
using (GZipStream gzInput = new GZipStream(new FileStream(inputPath, FileMode.Open), System.IO.Compression.CompressionMode.Decompress)) {
using (StreamReader reader = new StreamReader(gzInput, Encoding.UTF8)) {
using (GZipOutputStream gzipWriter = new GZipOutputStream(new FileStream(outputPath, FileMode.Create))) {
string line = null;
while ((line = reader.ReadLine()) != null) {
sbLine.Clear();
sbLine.Append(line.Replace("\t", " "));
sbLine.Append("\r\n");
byte[] bytes = Encoding.UTF8.GetBytes(sbLine.ToString());
gzipWriter.Write(bytes, 0, bytes.Length);
}
}
}
}
}
लेकिन कुछ कारण यह है कि लाइन के लिए फोन = reader.ReadLine के लिए () जबकि लूप में केवल एक बार पढ़ता है और फिर शून्य (पाठक ईओएस = सत्य) देता है। मैंने देशी सी # संपीड़न लाइब्रेरी के साथ और आईसीएसएचआरपीओडी पैकेज के साथ दोनों की कोशिश की है और मुझे वही व्यवहार मिलता है। मुझे एहसास है कि मैं हमेशा पूरी फ़ाइल निकाल सकता हूं, फिर इसे साफ़ कर सकता हूं, फिर इसे फिर से संपीड़ित कर सकता हूं, लेकिन मुझे संसाधनों, हार्ड ड्राइव स्पेस इत्यादि को बर्बाद करने से नफरत है। नोट: ये बड़ी फाइलें हैं (कई जीबी संपीड़ित हैं) तो कुछ भी मेमोरीस्ट्रीम के साथ एक अच्छा समाधान नहीं होने वाला है। क्या किसी ने इससे पहले कुछ अजीब सामना किया है? धन्यवाद।
आप सुनिश्चित करें कि फ़ाइल वास्तव में सिर्फ धारा संकुचित है और संग्रह ज़िप नहीं कर रहे हैं के साथ किसी और को मदद मिलती है? –
@ एलेक्सी लेवेनकोव - यदि यह ज़िप था तो यह कभी भी GZip स्ट्रीम बनाने में सक्षम नहीं होगा, यह असफल हो जाएगा क्योंकि फ़ाइल प्रकार गलत होगा – bruiseruser
संभावित डुप्लिकेट [GZipStream का उपयोग करके डिकंप्रेसिंग केवल पहली पंक्ति लौटाता है] (http: // stackoverflow .com/प्रश्न/11204330/decompressing-का उपयोग कर-gzipstream-रिटर्न-केवल-पहली पंक्ति) – Sam