簡體   English   中英

C#:以編程方式創建拆分的zip文件

[英]C#: Programmatically create a split zip file

我想從一個約1.5GB的文件夾中創建一個zip文件,並將該zip文件拆分為100MB的塊。 我已經找到了很多線程,但是對我來說還沒有解決任何問題。

首先,我嘗試了System.IO.Compression,但發現它不支持拆分zip文件(如果我輸入錯了,請糾正我!)。

接下來,我嘗試了Ionic.zip,它看起來超級簡單,但是我創建的每個文件集都以某種方式損壞(例如,以下將fonts目錄用作測試目錄的代碼創建了我無法創建的文件集然后使用winzip或winrar打開或解壓縮為存檔):

using (var zipFile = new Ionic.Zip.ZipFile(Encoding.UTF8))
{
    zipFile.AddDirectory("c:\\windows\\fonts", directoryPathInArchive: string.Empty);
    zipFile.MaxOutputSegmentSize = 100 * 1000000;
    zipFile.Save("c:\\users\\me\\test.zip");
}

最后,我嘗試了7z.dll和SharpCompress。 使用命令行和7z.exe文件,以下各項可完美運行:

7z.exe a "c:\users\me\test.zip" "c:\Windows\Fonts" -v100m

但是以下代碼給出錯誤“值不在預期范圍內”。

SevenZipCompressor.SetLibraryPath("c:\\program files\\7-zip\\7z.dll");
var compressor = new SevenZipCompressor();
compressor.CompressionMethod = CompressionMethod.Lzma2;
compressor.CustomParameters.Add("v", "100m");
compressor.CompressDirectory("c:\\windows\\fonts\\", "c:\\users\\me\\test.zip");

我還嘗試了以下操作(嘗試弄清了SharpCompress中的命令行開關是如何工作的),它確實創建了一個zip文件,但沒有將其拆分:

SevenZipCompressor.SetLibraryPath("c:\\program files\\7-zip\\7z.dll");
var compressor = new SevenZipCompressor();
compressor.CompressionMethod = CompressionMethod.Lzma2;
compressor.CustomParameters.Add("mt", "on");
compressor.CustomParameters.Add("0", "LZMA2:c=100m");
compressor.CompressDirectory("c:\\windows\\fonts\\", "c:\\users\\me\\test.zip");

有誰知道為什么以上任何一種方法都行不通? 還是還有其他人們尚未嘗試過的工作方式?

謝謝!

我不知道支持PKZIP拆分zip文件格式的庫。

這是一個老問題,但是Ionic正在工作。 也許有些棘手,但是還可以。 我的第一個版本還創建了一組無法解壓縮的文件。 但是在更改命令順序之后,可以解壓縮輸出。

    private static void CreateEncryptedZipFile(string filename, string to, FileInfo fi, string password)
    {
        using (var zipFile = new Ionic.Zip.ZipFile())
        {
            zipFile.Password = password;
            zipFile.Encryption = Ionic.Zip.EncryptionAlgorithm.WinZipAes256;
            zipFile.CompressionLevel = Ionic.Zlib.CompressionLevel.BestCompression;
            zipFile.AddFile(filename, directoryPathInArchive: string.Empty);
            zipFile.MaxOutputSegmentSize = 1024*1024*128;
            zipFile.Save(to + ".zip");
        }
        createXMLInfo(fi, to);
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM