क्या किसी को सी # में फ़ाइलों और फ़ोल्डर्स को संपीड़ित या डिक्रॉप करने का कोई अच्छा तरीका पता है? बड़ी फ़ाइलों को संभालना आवश्यक हो सकता है।फ़ोल्डर्स और फ़ाइलों को संपीड़ित/डिकंप्रेस करना
उत्तर
.NET 1.1 के रूप में जावा पुस्तकालयों में एकमात्र उपलब्ध विधि पहुंच रही है।
Using the Zip Classes in the J# Class Libraries to Compress Files and Data with C#
यह सुनिश्चित नहीं है कि यह हाल के संस्करणों में बदल गया है या नहीं।
मैंने हमेशा शार्पज़िप लाइब्रेरी का उपयोग किया है।
आप एक 3rd-party library such as SharpZip उपयोग कर सकते हैं के रूप में टॉम ने कहा।
एक और तरीका (तृतीय पक्ष जाने के बिना) विंडोज शैल एपीआई का उपयोग करना है। आपको अपने सी # प्रोजेक्ट में माइक्रोसॉफ्ट शैल कंट्रोल और ऑटोमेशन कॉम लाइब्रेरी का संदर्भ सेट करना होगा। गेराल्ड गिब्सन पर एक उदाहरण है:
http://geraldgibson.net/dnn/Home/CZipFileCompression/tabid/148/Default.aspx
यह जावा में करने के लिए बहुत आसान है, और जैसा कि कहा गया है कि आप सी # से java.util.zip पुस्तकालयों में पहुंच सकता है इसके बाद के संस्करण। संदर्भ के लिए देखें:
java.util.zip javadocs
sample code
मैं इस थोड़ी देर पहले इस्तेमाल किया एक फ़ोल्डर संरचना की गहरी (पुनरावर्ती) जिप करना है, लेकिन मुझे नहीं लगता कि मैं कभी unzipping इस्तेमाल किया। अगर मैं बहुत प्रेरित हूं तो मैं उस कोड को खींच सकता हूं और बाद में इसे संपादित कर सकता हूं।
.NET 2.0 फ्रेमवर्क नेमस्पेस System.IO.Compression
GZip और Deflate एल्गोरिदम का समर्थन करता है। यहां दो विधियां हैं जो एक बाइट स्ट्रीम को संपीड़ित और डिकंप्रेस करती हैं जिन्हें आप अपनी फ़ाइल ऑब्जेक्ट से प्राप्त कर सकते हैं। आप DefaultStream
के लिए GZipStream
को उस एल्गोरिदम का उपयोग करने के लिए नीचे दिए गए तरीकों में सब्सक्राइब कर सकते हैं। यह अभी भी अलग-अलग एल्गोरिदम के साथ संपीड़ित फ़ाइलों को संभालने की समस्या को छोड़ देता है।
public static byte[] Compress(byte[] data)
{
MemoryStream output = new MemoryStream();
GZipStream gzip = new GZipStream(output, CompressionMode.Compress, true);
gzip.Write(data, 0, data.Length);
gzip.Close();
return output.ToArray();
}
public static byte[] Decompress(byte[] data)
{
MemoryStream input = new MemoryStream();
input.Write(data, 0, data.Length);
input.Position = 0;
GZipStream gzip = new GZipStream(input, CompressionMode.Decompress, true);
MemoryStream output = new MemoryStream();
byte[] buff = new byte[64];
int read = -1;
read = gzip.Read(buff, 0, buff.Length);
while (read > 0)
{
output.Write(buff, 0, read);
read = gzip.Read(buff, 0, buff.Length);
}
gzip.Close();
return output.ToArray();
}
एक और अच्छा विकल्प भी DotNetZip है।
GZipStream उपयोग करने के लिए वास्तव में एक अच्छी उपयोगिता है।
मेरा उत्तर आपकी आंखें बंद कर देगा और DotNetZip का चयन करेगा। यह एक बड़े समुदाय द्वारा परीक्षण किया गया है।
आप इस विधि के साथ ज़िप फ़ाइल बना सकते हैं:
public async Task<string> CreateZipFile(string sourceDirectoryPath, string name)
{
var path = HostingEnvironment.MapPath(TempPath) + name;
await Task.Run(() =>
{
if (File.Exists(path)) File.Delete(path);
ZipFile.CreateFromDirectory(sourceDirectoryPath, path);
});
return path;
}
और उसके बाद आप इस तरीके से ज़िप फ़ाइल अनज़िप कर सकते हैं: ज़िप फ़ाइल पथ के साथ
1- इस विधि काम
public async Task ExtractZipFile(string filePath, string destinationDirectoryName)
{
await Task.Run(() =>
{
var archive = ZipFile.Open(filePath, ZipArchiveMode.Read);
foreach (var entry in archive.Entries)
{
entry.ExtractToFile(Path.Combine(destinationDirectoryName, entry.FullName), true);
}
archive.Dispose();
});
}
2 - यह विधि ज़िप फ़ाइल स्ट्रीम
public async Task ExtractZipFile(Stream zipFile, string destinationDirectoryName)
{
string filePath = HostingEnvironment.MapPath(TempPath) + Utility.GetRandomNumber(1, int.MaxValue);
using (FileStream output = new FileStream(filePath, FileMode.Create))
{
await zipFile.CopyToAsync(output);
}
await Task.Run(() => ZipFile.ExtractToDirectory(filePath, destinationDirectoryName));
await Task.Run(() => File.Delete(filePath));
}
- 1. फ़ाइलों और फ़ोल्डर्स के लिए कंप्यूटर को कैसे खोजें
- 2. फ़ाइलों के बिना फ़ोल्डर्स, फ़ोल्डर्स के बिना फाइलें, या पावरशेल
- 3. फ़ोल्डर्स जोड़ें और एसवीएनकिट
- 4. एसवीएन प्रोजेक्ट में फ़ाइलों या फ़ोल्डर्स को अनदेखा कैसे करें
- 5. एक्सकोड बिल्डिंग और संसाधन फ़ोल्डर्स
- 6. फ़ोल्डर्स
- 7. गिट और खाली फ़ोल्डर्स
- 8. बिटमैपफैक्टरी.decodeResource और drawable * फ़ोल्डर्स
- 9. क्या उन एसएसएनएन फ़ोल्डर्स के बिना सबवर्सन से फ़ाइलों को चेकआउट करना संभव है?
- 10. फ़ोल्डर्स
- 11. एक्सकोड, फ़ोल्डर्स और # आयात स्टेटमेंट
- 12. WinRT: पुस्तकालयों और ज्ञात फ़ोल्डर्स के बाहर फ़ाइलों को गिनाने के लिए ऐप
- 13. लॉक की गई फ़ाइलें और फ़ोल्डर्स हटाना
- 14. आईफोन एसडीके में सभी फ़ोल्डर्स और उनकी उपनिर्देशिका/फ़ाइलों को कैसे सूचीबद्ध करें?
- 15. एएसपी.Net - App_Data और App_Code फ़ोल्डर्स?
- 16. युद्ध फ़ाइलों को एन्क्रिप्ट करना
- 17. जावा फ़ाइलों को तैनात करना
- 18. सभी फ़ोल्डर्स से फ़ाइलों (*। Jpg) की सूची कैसे प्राप्त करें?
- 19. रूट निर्देशिका में फ़ाइलों और फ़ोल्डर्स की सूची के लिए क्वेरी
- 20. खींचें और छोड़ें - केवल फ़ोल्डर्स स्वीकृत
- 21. मुझे अपनी एक्सकोड परियोजना फ़ाइलों को कैसे व्यवस्थित करना चाहिए?
- 22. पायथन में एमपी 3 फ़ाइलों को बजाना और नियंत्रित करना?
- 23. निर्देशिका में फ़ाइलों को सूचीबद्ध करना और सभी उपनिर्देशिका
- 24. robots.txt दोनों साइटमैप और साइटमैप इंडेक्स फ़ाइलों को सूचीबद्ध करना?
- 25. SharpSvn: भंडार संरचना और व्यक्तिगत फ़ाइलों को प्राप्त करना
- 26. Google App Engine पर फ़ोल्डर्स में पायथन स्क्रिप्ट फ़ाइलों को कैसे आयात करें?
- 27. विंडोज़ और नामकरण फ़ोल्डर्स, 'कॉन' मुद्दा
- 28. GTK + Filechooser दोनों फाइलों और फ़ोल्डर्स को खोलने के लिए
- 29. वर्चुअल फ़ोल्डर्स बनाना और उन्हें फ़ाइल सिस्टम
- 30. टॉमकैट - एकाधिक वेबपैड फ़ोल्डर्स
नोट: मुझे एक * int प्रवाह * साल पहले SharpZip कोड में बग, जिससे यह यादृच्छिक फ़ाइलों पर असफल हो गया जो कि मूल्यों का सही संयोजन था। यह सुनिश्चित नहीं है कि क्या यह कभी तय हो गया है, लेकिन स्मृति से मैंने ओवरफ्लो से बचने के लिए SharpZip स्रोत में 'int' चर को' long' में बदल दिया है। * मुझे अपने पुराने निश्चित SharpZip कोड को खोजने का प्रयास करना होगा और जांचें कि यह नवीनतम * से मेल खाता है या नहीं। –