c# - मैं.NET के साथ 7-ज़िप अभिलेखागार कैसे बना सकता हूं?




compression 7zip (6)

मैं इस कोड का उपयोग करता हूं

                string PZipPath = @"C:\Program Files\7-Zip\7z.exe";
                string sourceCompressDir = @"C:\Test";
                string targetCompressName = @"C:\Test\abc.zip";
                string CompressName = targetCompressName.Split('\\').Last();
                string[] fileCompressList = Directory.GetFiles(sourceCompressDir, "*.*");

                    if (fileCompressList.Length == 0)
                    {
                        MessageBox.Show("No file in directory", "Important Message");
                        return;
                    }
                    string filetozip = null;
                    foreach (string filename in fileCompressList)
                    {
                        filetozip = filetozip + "\"" + filename + " ";
                    }

                    ProcessStartInfo pCompress = new ProcessStartInfo();
                    pCompress.FileName = PZipPath;
                    if (chkRequestPWD.Checked == true)
                    {
                        pCompress.Arguments = "a -tzip \"" + targetCompressName + "\" " + filetozip + " -mx=9" + " -p" + tbPassword.Text;
                    }
                    else
                    {
                        pCompress.Arguments = "a -tzip \"" + targetCompressName + "\" \"" + filetozip + "\" -mx=9";
                    }
                    pCompress.WindowStyle = ProcessWindowStyle.Hidden;
                    Process x = Process.Start(pCompress);
                    x.WaitForExit();

मैं अपने सी # कंसोल एप्लिकेशन से 7-ज़िप अभिलेखागार कैसे बना सकता हूं? मुझे नियमित, व्यापक रूप से उपलब्ध 7-Zip प्रोग्राम का उपयोग करके अभिलेखागार निकालने में सक्षम होना चाहिए।

इस प्रश्न के उत्तर के रूप में प्रदान किए गए उदाहरणों के साथ मेरे परिणाम यहां दिए गए हैं

  • 7z.exe पर "शेलिंग आउट" - यह सबसे सरल और सबसे प्रभावी तरीका है, और मैं पुष्टि कर सकता हूं कि यह अच्छी तरह से काम करता है । जैसा कि वर्कमाड 3 का उल्लेख है , मुझे बस यह गारंटी देने की आवश्यकता है कि 7z.exe सभी लक्षित मशीनों पर स्थापित है, जो कुछ मैं गारंटी दे सकता हूं।
  • मेमोरी संपीड़न में 7 ज़िप - यह क्लाइंट को भेजने से पहले कुकीज़ "इन-मेमोरी" को संपीड़ित करने का संदर्भ देता है; यह विधि कुछ हद तक आशाजनक प्रतीत होती है। रैपर विधियों ( एलजेएमए एसडीके लपेटना) वापसी प्रकार byte[] । जब मैं एक फ़ाइल में byte[] सरणी लिखता हूं, तो मैं 7-ज़िप का उपयोग करके इसे निकाला नहीं जा सकता ( File.7z is not supported archive )।
  • 7zSharp रैपर ( 7zSharp पर पाया गया) - यह 7z exe / LZMA एसडीके लपेटता है। मैंने अपने ऐप से प्रोजेक्ट का संदर्भ दिया, और यह सफलतापूर्वक कुछ संग्रह फाइलें बनाई, लेकिन मैं नियमित 7-ज़िप प्रोग्राम ( File.7z is not supported archive ) का उपयोग कर फ़ाइलों को निकालने में असमर्थ था।
  • 7 ज़िप एसडीके उर्फ ​​एलजेएमएमए एसडीके - मुझे लगता है कि मैं इसका उपयोग करने के लिए पर्याप्त समझदार नहीं हूं (यही कारण है कि मैंने यहां पोस्ट किया है) ... कोई भी कामकाजी कोड उदाहरण जो 7zip संग्रह बनाने का प्रदर्शन करता है जिसे निकालने में सक्षम है नियमित 7zip कार्यक्रम?
  • 7-ज़िप आर्काइव डीएलएल के लिए कोडप्रोजेक्ट सी # (.NET) इंटरफेस - केवल 7 ज़िप अभिलेखागार से निकालने का समर्थन करता है ... मुझे उन्हें बनाना होगा!
  • SharpZipLib - उनके FAQ अनुसार, SharpZipLib 7zip का समर्थन नहीं करता है।

मैंने एसडीके का इस्तेमाल किया।

उदाहरण के लिए:

using SevenZip.Compression.LZMA;
private static void CompressFileLZMA(string inFile, string outFile)
{
   SevenZip.Compression.LZMA.Encoder coder = new SevenZip.Compression.LZMA.Encoder();

   using (FileStream input = new FileStream(inFile, FileMode.Open))
   {
      using (FileStream output = new FileStream(outFile, FileMode.Create))
      {
          coder.Code(input, output, -1, -1, null);
          output.Flush();
      }
   }
}

यह सबसे आसान तरीका है .7z की बजाय .zip फ़ाइलों के साथ काम करना और डॉट नेट ज़िप का उपयोग करना

7zip कमांड को खोलने के लिए कताई करते समय उपयोगकर्ता विशेषाधिकार जैसे अन्य मुद्दे हैं, मुझे SevenZipSharp के साथ समस्या थी।

Private Function CompressFile(filename As String) As Boolean
Using zip As New ZipFile()
    zip.AddFile(filename & ".txt", "")
    zip.Save(filename & ".zip")
End Using

Return File.Exists(filename & ".zip")
End Function

सी # में सेवनजिप एसडीके का उपयोग कर एक पूर्ण कामकाजी उदाहरण यहां दिया गया है।

यह Windows 7zip एप्लिकेशन द्वारा बनाए गए मानक 7zip फ़ाइलों को लिख और पढ़ेगा।

पुनश्च। पिछला उदाहरण कभी भी डिकंप्रेस नहीं करेगा क्योंकि यह फ़ाइल की शुरुआत में आवश्यक संपत्ति जानकारी कभी नहीं लिखा था।

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SevenZip.Compression.LZMA;
using System.IO;
using SevenZip;

namespace VHD_Director
{
    class My7Zip
    {
        public static void CompressFileLZMA(string inFile, string outFile)
        {
            Int32 dictionary = 1 << 23;
            Int32 posStateBits = 2;
            Int32 litContextBits = 3; // for normal files
            // UInt32 litContextBits = 0; // for 32-bit data
            Int32 litPosBits = 0;
            // UInt32 litPosBits = 2; // for 32-bit data
            Int32 algorithm = 2;
            Int32 numFastBytes = 128;

            string mf = "bt4";
            bool eos = true;
            bool stdInMode = false;


            CoderPropID[] propIDs =  {
                CoderPropID.DictionarySize,
                CoderPropID.PosStateBits,
                CoderPropID.LitContextBits,
                CoderPropID.LitPosBits,
                CoderPropID.Algorithm,
                CoderPropID.NumFastBytes,
                CoderPropID.MatchFinder,
                CoderPropID.EndMarker
            };

            object[] properties = {
                (Int32)(dictionary),
                (Int32)(posStateBits),
                (Int32)(litContextBits),
                (Int32)(litPosBits),
                (Int32)(algorithm),
                (Int32)(numFastBytes),
                mf,
                eos
            };

            using (FileStream inStream = new FileStream(inFile, FileMode.Open))
            {
                using (FileStream outStream = new FileStream(outFile, FileMode.Create))
                {
                    SevenZip.Compression.LZMA.Encoder encoder = new SevenZip.Compression.LZMA.Encoder();
                    encoder.SetCoderProperties(propIDs, properties);
                    encoder.WriteCoderProperties(outStream);
                    Int64 fileSize;
                    if (eos || stdInMode)
                        fileSize = -1;
                    else
                        fileSize = inStream.Length;
                    for (int i = 0; i < 8; i++)
                        outStream.WriteByte((Byte)(fileSize >> (8 * i)));
                    encoder.Code(inStream, outStream, -1, -1, null);
                }
            }

        }

        public static void DecompressFileLZMA(string inFile, string outFile)
        {
            using (FileStream input = new FileStream(inFile, FileMode.Open))
            {
                using (FileStream output = new FileStream(outFile, FileMode.Create))
                {
                    SevenZip.Compression.LZMA.Decoder decoder = new SevenZip.Compression.LZMA.Decoder();

                    byte[] properties = new byte[5];
                    if (input.Read(properties, 0, 5) != 5)
                        throw (new Exception("input .lzma is too short"));
                    decoder.SetDecoderProperties(properties);

                    long outSize = 0;
                    for (int i = 0; i < 8; i++)
                    {
                        int v = input.ReadByte();
                        if (v < 0)
                            throw (new Exception("Can't Read 1"));
                        outSize |= ((long)(byte)v) << (8 * i);
                    }
                    long compressedSize = input.Length - input.Position;

                    decoder.Code(input, output, compressedSize, outSize, null);
                }
            }
        }

        public static void Test()
        {
            CompressFileLZMA("DiscUtils.pdb", "DiscUtils.pdb.7z");
            DecompressFileLZMA("DiscUtils.pdb.7z", "DiscUtils.pdb2");
        }
    }
}

SevenZipSharp एक और समाधान है। 7-ज़िप अभिलेखागार बनाता है ...


EggCafe 7 ज़िप कुकी उदाहरण यह 7Zip के DLL के साथ एक उदाहरण (ज़िप कुकी) है।

7zSharp यह एक ओपन सोर्स प्रोजेक्ट है जो 7z के वर्प ज़िपिंग फ़ंक्शन है।

7 ज़िप एसडीके 7zip (सी, सी ++, सी #, जावा) के लिए आधिकारिक एसडीके <--- मेरा सुझाव

SharpDevelop.net द्वारा नेट ज़िपिंग लाइब्रेरी

7 ज़िप के साथ CodeProject उदाहरण

SharpZipLib कई ज़िप





7zip