পুরো ফাইলটি আনজিপ না করে কীভাবে জিপ ফাইল থেকে ডেটা পড়তে হয়


99

সম্পূর্ণ ফাইলটি সঙ্কুচিত না করে কোনও জিপ ফাইল থেকে ডেটা বের করার জন্য নেট (সি #) তে যাইহোক আছে?

সহজভাবে আমি সম্ভবত একটি জিপ ফাইলের শুরু থেকে ডেটা (ফাইল) আহরণ করতে চাই, স্পষ্টতই এটি নির্ভর করে যদি সংক্ষেপণ অ্যালগরিদম কোনও ডিটারমিনিস্টিক ক্রমে ফাইলটি সংকুচিত করে।


স্ট্যাকওভারফ্লো ডকুমেন্টস / প্রশ্নগুলি / 328343/… ?
ম্যাগনাস

উত্তর:


79

ডটনেটজিপ এখানে আপনার বন্ধু।

সহজ মতে:

using (ZipFile zip = ZipFile.Read(ExistingZipFile))
{
  ZipEntry e = zip["MyReport.doc"];
  e.Extract(OutputStream);
}

(আপনি কোনও ফাইল বা অন্যান্য গন্তব্যেও এক্সট্রাক্ট করতে পারেন)।

জিপ ফাইলের বিষয়বস্তুর সারণি পড়া এত সহজ:

using (ZipFile zip = ZipFile.Read(ExistingZipFile))
{
  foreach (ZipEntry e in zip)
  {
    if (header)
    {
      System.Console.WriteLine("Zipfile: {0}", zip.Name);
      if ((zip.Comment != null) && (zip.Comment != "")) 
        System.Console.WriteLine("Comment: {0}", zip.Comment);
      System.Console.WriteLine("\n{1,-22} {2,8}  {3,5}   {4,8}  {5,3} {0}",
                               "Filename", "Modified", "Size", "Ratio", "Packed", "pw?");
      System.Console.WriteLine(new System.String('-', 72));
      header = false;
    }
    System.Console.WriteLine("{1,-22} {2,8} {3,5:F0}%   {4,8}  {5,3} {0}",
                             e.FileName,
                             e.LastModified.ToString("yyyy-MM-dd HH:mm:ss"),
                             e.UncompressedSize,
                             e.CompressionRatio,
                             e.CompressedSize,
                             (e.UsesEncryption) ? "Y" : "N");

  }
}

সম্পাদিত দ্রষ্টব্য: ডটনেটজিপ কোডেপ্লেক্সে থাকত। কোডপ্লেক্স বন্ধ হয়ে গেছে। পুরানো সংরক্ষণাগারটি কোডপ্লেক্সে এখনও উপলব্ধ । দেখে মনে হচ্ছে কোডটি গিথুবে স্থানান্তরিত হয়েছে:



9
+1 পর্দার আড়ালে, কন্ট্রাক্টরে ডটনেটজিপ যা করে তা জিপফাইলের অভ্যন্তরে "ডিরেক্টরিতে" অনুসন্ধান করা হয় এবং তারপরে এটি পড়ুন এবং এন্ট্রিগুলির তালিকা তৈরি করুন। এই মুহুর্তে, যদি আপনার অ্যাপ্লিকেশনটি একটি এন্ট্রিতে এক্সট্র্যাক্ট () কল করে, ডটনেটজিপ জিপ ফাইলের যথাযথ জায়গায় সন্ধান করে এবং ঠিক সেই প্রবেশের জন্য ডেটা সংক্রামিত করে।
চিজো

117

নেট ফ্রেমওয়ার্ক 4.5 সহ ( জিপআর্কাইভ ব্যবহার করে ):

using (ZipArchive zip = ZipFile.Open(zipfile, ZipArchiveMode.Read))
    foreach (ZipArchiveEntry entry in zip.Entries)
        if(entry.Name == "myfile")
            entry.ExtractToFile("myfile");

জিপফাইলে "মাইফিল" সন্ধান করুন এবং এটি নিষ্কাশন করুন।


37
একজন কেবল স্ট্রিমটি পেতে প্রবেশ (ওপেন () ব্যবহার করতে পারেন (যদি বিষয়বস্তুগুলি পড়তে হবে তবে কোনও ফাইলে লেখা না হয়)।
এরা

17
তথ্যসূত্র: System.IO.Compression.dllএবংSystem.IO.Compression.FileSystem.dll
yzorg

18

এরকম কিছু হ'ল যদি আপনি শার্পজিপলিব ব্যবহার করতে চান তবে একের পর এক ফাইলগুলি তালিকাভুক্ত এবং নিষ্কাশন করবে:

var zip = new ZipInputStream(File.OpenRead(@"C:\Users\Javi\Desktop\myzip.zip"));
var filestream = new FileStream(@"C:\Users\Javi\Desktop\myzip.zip", FileMode.Open, FileAccess.Read);
ZipFile zipfile = new ZipFile(filestream);
ZipEntry item;
while ((item = zip.GetNextEntry()) != null)
{
     Console.WriteLine(item.Name);
     using (StreamReader s = new StreamReader(zipfile.GetInputStream(item)))
     {
      // stream with the file
          Console.WriteLine(s.ReadToEnd());
     }
 }

এই উদাহরণের উপর ভিত্তি করে: জিপ ফাইলের ভিতরে থাকা সামগ্রী


4
খোলামেলা কথা বললে, আমি দেখতে পেলাম না যে এই লিঙ্কটি প্রশ্নের উত্তর দেয়।
ইউজিন মায়াভস্কি 'কলব্যাক

11

এখানে কোনও জিটিএফ সংরক্ষণাগার থেকে কোনও ইউটিএফ 8 পাঠ্য ফাইলটি স্ট্রিং ভেরিয়েবল (.NET ফ্রেমওয়ার্ক 4.5 এবং এর উপরে) তে কীভাবে পড়া যায়:

string zipFileFullPath = "{{TypeYourZipFileFullPathHere}}";
string targetFileName = "{{TypeYourTargetFileNameHere}}";
string text = new string(
            (new System.IO.StreamReader(
             System.IO.Compression.ZipFile.OpenRead(zipFileFullPath)
             .Entries.Where(x => x.Name.Equals(targetFileName,
                                          StringComparison.InvariantCulture))
             .FirstOrDefault()
             .Open(), Encoding.UTF8)
             .ReadToEnd())
             .ToArray());

0

জিপ ফাইলগুলির একটি টেবিল রয়েছে। প্রতিটি জিপ ইউটিলিটিতে কেবলমাত্র টিওকে জিজ্ঞাসা করার ক্ষমতা থাকা উচিত। অথবা আপনি সামগ্রীর সারণীটি মুদ্রণ করতে এবং পাঠ্য ফাইলে পুনর্নির্দেশের জন্য 7zip -t এর মতো একটি কমান্ড লাইন প্রোগ্রাম ব্যবহার করতে পারেন।


0

এই ক্ষেত্রে আপনার জিপ স্থানীয় হেডার এন্ট্রিগুলি পার্স করতে হবে। জিপ ফাইলে সংরক্ষিত প্রতিটি ফাইলের স্থানীয় ফাইল শিরোলেখ প্রবেশের পূর্ববর্তী থাকে, যা (সাধারণভাবে) ডিকম্প্রেশন করার জন্য পর্যাপ্ত তথ্য ধারণ করে, সাধারণত, আপনি স্ট্রিমের মধ্যে এ জাতীয় প্রবেশের সহজ পার্সিং করতে পারেন, প্রয়োজনীয় ফাইলটি নির্বাচন করতে পারেন, নথির শিরোনাম + সংকুচিত ফাইলের ডেটা অন্যকে অনুলিপি করতে পারবেন ফাইলটি চাপুন এবং সেই অংশে আনজিপ কল করুন (আপনি যদি পুরো জিপ ডিকম্প্রেশন কোড বা লাইব্রেরি নিয়ে ডিল করতে না চান)।

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