কীভাবে আমি নেট থেকে 7-জিপ সংরক্ষণাগার তৈরি করব?


101

আমি আমার সি # কনসোল অ্যাপ্লিকেশন থেকে কীভাবে 7-জিপ সংরক্ষণাগার তৈরি করতে পারি? আমার নিয়মিত, বহুল পরিমাণে উপলব্ধ 7-জিপ প্রোগ্রামটি ব্যবহার করে সংরক্ষণাগারগুলি বের করতে সক্ষম হওয়া দরকার ।


এই প্রশ্নের উত্তর হিসাবে প্রদত্ত উদাহরণ সহ আমার ফলাফল এখানে

  • 7z.exe থেকে "শেলিং আউট" - এটি সবচেয়ে সহজ এবং কার্যকর পদ্ধতি, এবং আমি নিশ্চিত করতে পারি যে এটি দুর্দান্তভাবে কাজ করেওয়ার্কম্যাড ৩ হিসাবে উল্লেখ করা হয়েছে , আমার কেবল গ্যারান্টি দেওয়া দরকার যে সমস্ত টার্গেট মেশিনে 7z.exe ইনস্টল করা আছে, যা আমি গ্যারান্টি দিতে পারি।
  • স্মৃতি সংকোচনে 7 জিপ - এটি ক্লায়েন্টকে প্রেরণের আগে কুকিগুলিকে "ইন-মেমরি" সংক্ষেপণ বোঝায়; এই পদ্ধতিটি কিছুটা আশাব্যঞ্জক বলে মনে হচ্ছে। মোড়কের পদ্ধতি ( এলজেডএমএ এসডিকে মোড়ানো ) রিটার্নের ধরণ byte[]। আমি যখন byte[]কোনও ফাইলে অ্যারে লিখি তখন আমি 7-জিপ ( File.7z is not supported archive) ব্যবহার করে এটিকে বের করতে পারি না ।
  • 7zSharp মোড়ক ( কোডপ্লেক্সে পাওয়া যায়) - এটি 7z এক্সি / এলজেডএমএ এসডিকে মোড়ানো । আমি প্রকল্পটি আমার অ্যাপ্লিকেশন থেকে উল্লেখ করেছি এবং এটি সফলভাবে কিছু সংরক্ষণাগার ফাইল তৈরি করেছে, তবে আমি নিয়মিত 7-জিপ প্রোগ্রাম ( File.7z is not supported archive) ব্যবহার করে ফাইলগুলি বের করতে পারিনি ।
  • 7 জিপ এসডিকে ওরফে এলজেডএমএ এসডিকে - আমি অনুমান করি যে এটি কীভাবে ব্যবহার করতে হবে তা নির্ধারণ করার জন্য আমি যথেষ্ট স্মার্ট নই (যার কারণেই আমি এখানে পোস্ট করেছি) ... এমন কোনও কার্য কোডের উদাহরণ যা একটি 7 জীপ সংরক্ষণাগার তৈরি করে যেটি দ্বারা এক্সট্র্যাক্ট করতে সক্ষম হবে নিয়মিত 7zip প্রোগ্রাম?
  • কোডপ্রজেক্ট সি # (.নেট) 7-জিপ সংরক্ষণাগার ডিএলএলগুলির জন্য ইন্টারফেস - কেবল 7zip সংরক্ষণাগার থেকে নিষ্কাশন সমর্থন করে ... আমার সেগুলি তৈরি করা দরকার!
  • SharpZipLib - তাদের এফএকিউ অনুসারে , শার্পজিপলিব 7 জীপ সমর্থন করে না।

32
সমস্ত লিঙ্কটি নীচে আমার পোস্ট থেকে থাকলে এটি Google থেকে লিখবেন না। মানুষের জন্য খুব সম্মানজনক নয় কিছু সমাধান অনুসন্ধান করার জন্য সময় নিয়েছে।
প্যাট্রিক দেশজার্ডিনস 22-18

3
আমি জানি এই পোস্টটি পুরানো, তবে আমি আজ আমার গবেষণায় সেভেনজিপশার্প নামে একটি প্রকল্প দেখেছি। সেভেনজিপার্প.কোডেপ্লেক্স.কম
টিমারজ

12
ভবিষ্যতের পাঠকদের জন্য কেবল একটি সতর্কতার শব্দ। সেভেনজিপশার্প মনে হয় পরিত্যক্ত। আজ অবধি সাম্প্রতিক স্থিতিশীল প্রকাশ (০..6৪) অগস্ট ২০১০ সালে কিছু দুষ্টু মাল্টিথ্রেডিং ইস্যু (বাগ রিপোর্ট অনুসারে) প্রকাশিত হয়েছিল। সেই থেকে কেবল কয়েকটি উত্স কোড কমিট পোস্ট করা হয়েছে।
এন্ট্টু

উত্তর:


28

আপনি যদি গ্যারান্টি দিতে পারেন যে সমস্ত টার্গেট মেশিনে 7-জিপ অ্যাপ্লিকেশন ইনস্টল করা হবে (এবং পথে), আপনি কমান্ড লাইন অ্যাপ্লিকেশন 7z কল করে অফলোড করতে পারেন। সর্বাধিক মার্জিত সমাধান নয় তবে এটি সবচেয়ে কম কাজ।


7
আমরা আসলে আমাদের বাইনারিগুলির সাথে 7z কমান্ড লাইনটি ইউটিলিটি পাঠিয়েছি এবং এটিতে শেল আউট করব। আমাদের জন্য সত্যই ভাল কাজ করে।
ডেভিড মহুন্দরো

79

EgCafe 7 জিপ কুকি উদাহরণ এটি 7 জিপের ডিএলএল সহ একটি উদাহরণ (জিপিং কুকি)।

কোডপ্লেক্স র‍্যাপার এটি একটি ওপেন সোর্স প্রকল্প যা 7z এর ওয়ার্প জিপিং ফাংশন।

7 জিপ এসডিকে 7 জিপ (সি, সি ++, সি #, জাভা) এর অফিসিয়াল এসডিকে <--- আমার পরামর্শ

। নেট জিপ লাইব্রেরি শার্পডেওয়েলফটনেট

কোডজিস্টিক 7 জিপ সহ উদাহরণস্বরূপ

শার্পজিপলিব অনেকগুলি জিপ করছে


সম্পন্ন হয়েছে এবং আমি একটি ওপেন সোর্স প্রকল্পও দরকারী দরকারী।
প্যাট্রিক দেশজার্ডিনস

1
হাঃ হাঃ হাঃ? একটি স্ট্রিং ... একটি ফাইল বা যাই হোক না কেন দ্বারা কুকি পরিবর্তন করুন ... হ্যাঁ?
প্যাট্রিক দেশজার্ডিনস

1
না, আমি কেবল দেখতে চাই যে কেউ যদি একটি কার্যকরী উদাহরণ নিয়ে আসে তবে ... আপনার গবেষণার জন্য আপনাকে ধন্যবাদ, তবে আপনি সরবরাহ করেছেন এমন লিঙ্কগুলির কোনওটিই আমাকে কাজ করে এমন কিছুতে পরিচালিত করতে সক্ষম হয় নি।
সেবার

2
আমার একমত হতে হবে যে কোনওটির কাছেই এমন কোনও কোড নেই যা আপনি অনুলিপি এবং পেস্ট করতে পারেন। সমস্ত উত্তর সহ এসডিকে এক, তবে কিছু কাজ করতে কিছু সময় এবং প্রচেষ্টা লাগে। আমি বুঝতে পারি আপনি এটি করতে চান না। আপনার দিনটি শুভ হোক.
প্যাট্রিক দেশজার্ডিনস

3
যাইহোক, আমি শার্পডেভলফ / শার্পজিপলিব রেফারেন্সগুলি সরিয়ে দেওয়ার পরামর্শ দিচ্ছি, যেহেতু উভয়ই একই রকম উল্লেখ করে এবং তারা 7-জিপ সমর্থন করে না। Seibar 7z জন্য স্পষ্টভাবে জিজ্ঞাসা। আমি 7z সমাধানগুলিও অনুসন্ধান করছি কারণ ShaprZipLib সংরক্ষণাগারটির সাথে কাজ করে নি এবং এই থ্রেডটি খুঁজে পেয়েছে। ShaprZipLib একটি বিভ্রান্তিকর ইঙ্গিত!
ওনসকুমারু

25

সেভেনজিপশার্প আরেকটি সমাধান। 7-জিপ সংরক্ষণাগার তৈরি করে ...


7
মার্খোরের এই পোস্টটি আসলে সেভেনজিপশার্প প্রকল্পের নির্মাতা from সেভেনজিপশার্প 7 জিপ ডেলিতে প্রোগ্রামেটিক অ্যাক্সেসের অনুমতি দেয়, এটি একেবারে পুরো বৈশিষ্ট্যযুক্ত। আমি এলজেডএমএ এসডিকে নিম্ন স্তরের এবং বুঝতে অসুবিধা পেয়েছি। সেভেনজিপশার্প, বিপরীতে, ভাল-ডকুমেন্টেড, ব্যবহার করা সহজ এবং এর পরীক্ষার প্রকল্পে অনেক নমুনা ব্যবহার রয়েছে। উদাহরণগুলি ব্যবহার করে, আমি দ্রুত ফাইল বা মেমরি ব্যবহার করে সংকুচিত এবং সংক্ষেপিত করতে পারি।
জন উইগার

4
সেভেনজিপশার্প পরিত্যক্ত বলে মনে হচ্ছে। প্রশ্নে আমার আগের মন্তব্য দেখুন।
অ্যান্টু

সেভেনজিপশার্প ধীর is এই মুহুর্তে সর্বাধিক প্রস্তাবিত সমাধান হ'ল প্রক্রিয়া.স্টার্ট ("7z.exe ......) ব্যবহার করুন
klm_

24

সি # তে সেভেনজিপ এসডিকে ব্যবহার করে একটি সম্পূর্ণ কাজের উদাহরণ।

এটি উইন্ডোজ 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");
        }
    }
}

15
মনে রাখবেন যে এটি খাঁটি LZMA সংক্ষেপণ / ডিকম্প্রেশন। 7zip ফাইল ফর্ম্যাটটি এর উপরে একটি স্তর যা ফাইলের নাম / পাথ এবং অন্যান্য ফাইল মেটাডেটা সহ একাধিক ফাইলের প্যাকেজিংয়ের অনুমতি দেয়।
redcalx

1
@redcalx ঠিক আছে। উপরের, 7 জিপ স্তরটি কীভাবে প্রক্রিয়াকরণ করা যায় তা কারওই একটি সূত্র রয়েছে? অন্য এসও পোস্টের রেফারেন্সটি দুর্দান্ত হবে :)
ক্রিস্টোফার জে স্মিথ

8

আমি এসডিকে ব্যবহার করেছি

উদাহরণ:

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();
      }
   }
}

7
এবং আপনি কিভাবে ফাইলটি সংক্ষেপণ করবেন? সেভেনজিপ.কম্পশন.এলজেডএমএ ডেকোডার ব্যবহার করে এবং কোড (স্ট্রিম 1, স্ট্রিম 2, -1, -1, নাল) দিয়ে এটি কল করার চেষ্টা করেছি; এটি ফ্রেমওয়ার্ক থেকে একটি ডেটা ব্যতিক্রম দিয়েছে।
কার্স্টেন

3
 string zipfile = @"E:\Folderx\NPPES.zip";
 string folder = @"E:\TargetFolderx";

 ExtractFile(zipfile,folder);
public void ExtractFile(string source, string destination)
        {
            // If the directory doesn't exist, create it.
            if (!Directory.Exists(destination))
                Directory.CreateDirectory(destination);

            //string zPath = ConfigurationManager.AppSettings["FileExtactorEXE"];
          //  string zPath = Properties.Settings.Default.FileExtactorEXE; ;

            string zPath=@"C:\Program Files\7-Zip\7zG.exe";

            try
            {
                ProcessStartInfo pro = new ProcessStartInfo();
                pro.WindowStyle = ProcessWindowStyle.Hidden;
                pro.FileName = zPath;
                pro.Arguments = "x \"" + source + "\" -o" + destination;
                Process x = Process.Start(pro);
                x.WaitForExit();
            }
            catch (System.Exception Ex) { }
        }

উত্স থেকে মাত্র 7 জিপ ইনস্টল করুন এবং পদ্ধতিটিতে প্যারামিটারটি দিন।

ধন্যবাদ। উত্তরটি পছন্দ করুন


এটি আমার জন্য 7za.exe সহ একটি উইন্ডোজ পরিষেবাতে কাজ করেছে
মার্কো ডুইন্ডাম

1

আমি এই কোডটি ব্যবহার করি

                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();

1

কল করা নুগেট প্যাকেজ ইনস্টল করুন SevenZipSharp.Interop

তারপর:

SevenZipBase.SetLibraryPath(@".\x86\7z.dll");
var compressor = new SevenZip.SevenZipCompressor();
var filesToCompress = Directory.GetFiles(@"D:\data\");
compressor.CompressFiles(@"C:\archive\abc.7z", filesToCompress);

আমি এটির সাথে বিদ্যমান 7z-সংরক্ষণাগারে ফাইল যুক্ত করার চেষ্টা করেছি এবং দূষিত সংরক্ষণাগার পেয়েছি।
ভৌগলিক

1

একটি 17.9MB টেক্সট ফাইল ব্যবহার করে @ ওরোওলোফিল কোডে কিছু অতিরিক্ত পরীক্ষার তথ্য।
কোড-উদাহরণস্বরূপ "যেমনটি" তে সম্পত্তি মানগুলি ব্যবহার করা পারফরম্যান্সে একটি বিশাল নেতিবাচক প্রভাব ফেলবে, এটি 14.16 সেকেন্ড সময় নেয় ।

নীচের বৈশিষ্ট্যগুলিকে 3.91 সেকেন্ডে একই কাজ করুন (আর্কাইভটিতে একই ধারক তথ্য থাকবে যা হ'ল: আপনি 7 জীপ দিয়ে সংরক্ষণাগারটি বের করতে এবং পরীক্ষা করতে পারেন তবে কোনও ফাইলের নাম নেই)

নেটিভ 7zip 2 সেকেন্ড

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
};

আমি নেটিভ 7zip এবং একটি 1,2GB এসকিউএল ব্যাকআপ ফাইল (.bak)
7zip (সর্বাধিক সংক্ষেপণ) ব্যবহার করে আরেকটি পরীক্ষা করেছি : 1 মিনিটের
এলজেডএমএ এসডিকে (উপরের সম্পত্তি নির্ধারণের সাথে ওরোওফিল): 12:26 মিনিট :-(
আউটপুটফিল মোটামুটি একই আকারের ।

সুতরাং আমি অনুমান করি যে আমি নিজেই সি / সি ++ ইঞ্জিনের উপর ভিত্তি করে একটি সমাধান ব্যবহার করব, ia হয় সি # থেকে 7 জিপ নির্বাহযোগ্যকে কল করুন বা স্কুইড-বাক্স / সেভেনজিপশার্প ব্যবহার করুন , যা 7zip সি / সি ++ ডিএল ফাইলের চারপাশে মোড়কযুক্ত এবং মনে হয় সেভেনজিপশার্পের নতুন কাঁটাচামচ হতে to মোড়কের পরীক্ষা করা হয়নি তবে আমি আশা করি ঠিক নেটিভ 7 জিপ হিসাবেই পারফর্ম করবো। তবে আশা করা যায় এটি স্ট্রিম সংক্ষেপণের সম্ভাবনা দেবে যা আপনি স্পষ্টতই এপিকে কল করলে আপনি সম্ভবত তা করতে পারবেন না। অন্যথায় আমি অনুমান করি যে এক্সকে কল করার চেয়ে কোনও কার্যকর সুবিধা নেই। মোড়কের কিছু অতিরিক্ত নির্ভরতা রয়েছে তাই এটি আপনার প্রকাশিত প্রকল্পটিকে "ক্লিনার" তৈরি করবে না।

যাইহোক এটি দেখে মনে হচ্ছে। নেট কোর টিম। कोर ভেরিতে system.io ক্লাসে এলজেডএমএ প্রয়োগের বিষয়টি বিবেচনা করে। 5, যে দুর্দান্ত হবে!

(আমি জানি এটি একটি মন্তব্য এবং কোনও উত্তর নয় তবে কোড স্নিপেট সরবরাহ করতে সক্ষম হতে এটি কোনও মন্তব্য হতে পারে না)


0

এই সহজতম উপায় হ'ল .zz এর পরিবর্তে .zip ফাইলগুলির সাথে কাজ করা এবং ডট নেট জিপ ব্যবহার করা

শেল করার জন্য 7 জিপ কমান্ডগুলি স্পিনিং করার সময় ব্যবহারকারীর সুবিধার মতো অন্যান্য সমস্যা রয়েছে, আমার সেভেনজিপশার্প নিয়ে সমস্যা হয়েছিল with

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

0

শার্প কমপ্রেস আমার মতে সেখানকার স্মার্ট কম্প্রেশন গ্রন্থাগারগুলির মধ্যে একটি। এটি LZMA (7-জিপ) সমর্থন করে, ব্যবহার করা সহজ এবং সক্রিয় বিকাশের অধীনে।

এটি ইতিমধ্যে এলজেডএমএ স্ট্রিমিং সমর্থন হিসাবে রয়েছে, এটি লেখার সময় দুর্ভাগ্যবশত শুধুমাত্র 7-জিপ সংরক্ষণাগারটি পড়া সমর্থন করে। কিন্তু সংরক্ষণাগার রাইটিং তাদের টুডু তালিকায় রয়েছে (রিডমি দেখুন)। ভবিষ্যতের পাঠকদের জন্য: বর্তমান অবস্থা এখানে পেতে চেক করুন: https://github.com/adamhathcock/sharpcompress/blob/master/FORMATS.md

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.