如何在c#中读取多个zip文件

问题描述 投票:0回答:3

我有两个问题,你能帮我吗,我有一个可以漂亮地读取 zip 文件的功能,但我无法再读取分割的 zip 文件了。

zip.001 邮编.002

如何读取zip.001文件内容?以及是否可以读取带有特殊字符的内容,例如ó ć ę ł 等

提前感谢您的帮助。

问候 洛博斯

using (OpenFileDialog openFileDialog1 = new OpenFileDialog())
{



    openFileDialog1.InitialDirectory = d.Name;
    //openFileDialog1.InitialDirectory = @"c:\";
    openFileDialog1.Filter = "zip files (*.zip)|*.zip |All files (*.*)|*.*";
    openFileDialog1.FilterIndex = 2;
    openFileDialog1.RestoreDirectory = true;

    if (openFileDialog1.ShowDialog() == DialogResult.OK)
    {

        ZipArchive zip = ZipFile.OpenRead(openFileDialog1.FileName);

        listBox1.Items.Clear();
        foreach (ZipArchiveEntry entry in zip.Entries)
        {

            string unicodeString = entry.FullName;

            // Create two different encodings.
            Encoding ascii = Encoding.GetEncoding("CP852");
            Encoding unicode = Encoding.Unicode;

            // Convert the string into a byte array.
            byte[] unicodeBytes = unicode.GetBytes(unicodeString);

            // Perform the conversion from one encoding to the other.
            byte[] asciiBytes = Encoding.Convert(unicode, ascii, unicodeBytes);

            listBox1.Items.Add(unicodeString);
            listBox1.ForeColor = Color.FromArgb(1, 150, 227);

            //textBox5.AppendText(entry.FullName);
            // toolStripStatusLabel2.Text = " Ilość elementów:  " + listBox1.Items.Count.ToString();

        }

    }
}
c# file zip c#-ziparchive
3个回答
1
投票

SevenZipSharp 及其只读 7zip 文件而不是 zip 文件,我收到错误。

using (OpenFileDialog openFileDialog1 = new OpenFileDialog())
                    {
                        openFileDialog1.InitialDirectory = d.Name;               
                        openFileDialog1.Filter = "zip files (*.zip)|*.zip |All files (*.*)|*.*";
                        openFileDialog1.FilterIndex = 2;
                        openFileDialog1.RestoreDirectory = true;


                        if (openFileDialog1.ShowDialog() == DialogResult.OK)
                        {                    
                            SevenZip.SevenZipCompressor.SetLibraryPath(Path.Combine(Path.GetDirectoryName(AppDomain.CurrentDomain.BaseDirectory + "X86\\"),"7z.dll"));
                            SevenZip.SevenZipExtractor.SetLibraryPath(Path.Combine(Path.GetDirectoryName(AppDomain.CurrentDomain.BaseDirectory + "X86\\"), "7z.dll"));
                            using (var zip = new SevenZipExtractor(openFileDialog1.FileName))
                            {
                                foreach (var file in zip.ArchiveFileData)
                                {
                                    listBox1.Items.Add(file.FileName);
                                    listBox1.ForeColor = Color.FromArgb(1, 150, 227);
                                }
                            }
                        }
                    }

1
投票

我以不同的方式做到了这一点,不幸的是,我不得不将“zip”作为链接文件放在一边,并专注于链接的“rar”,它读取超级,因此“zip”仅使用DotNetZip读取为zip,并且存档分为多个部分通过 rar 读取,确切地说是:SharpCompress。

if (ext == ".rar")
{
    //------------------------------------------------------------------------------

    var archive = ArchiveFactory.Open(item);
    foreach (var entry in archive.Entries)
    {
        if (!entry.IsDirectory)
        {
            // Console.WriteLine(entry.Key);
            listBox1.Items.Add(entry.Key);
            listBox1.ForeColor = Color.White;
        }
    }

    //------------------------------------------------------------------------------

}
else if (ext == ".zip")
{

    using (ZipFile zip = new ZipFile(item))

    {
        zip.AlternateEncoding = System.Text.Encoding.GetEncoding("windows-1250");
        // Loop through the archive's files.

        foreach (ZipEntry zip_entry in zip)
        {
            listBox1.Items.Add(zip_entry.FileName);
            listBox1.ForeColor = Color.White;
        }
    }
}

0
投票

只要您的 zip 文件不是使用 7-zip 创建的并且遵循文件名 filename.z01

filenamez02
、...
,您就可以使用 
DotNetZip

  using (ZipFile zip = ZipFile.Read(NameOfExistingZipFile))
  {
    foreach (ZipEntry e in zip)
    {
      Console.WriteLine($"{e.FileName} {e.LastModified}");
    }
  }

另一种可能性是SevenZipSharp,但它也需要安装 7-zip .DLL。

© www.soinside.com 2019 - 2024. All rights reserved.