【问题标题】:C# - Compress byte[]C# - 压缩字节[]
【发布时间】:2016-04-06 14:07:00
【问题描述】:

我收到一个 zip 文件 base64 字符串,转换为 byte[],在内存中打开,修改内容,然后将新的 byte[] 再次“压缩”为 base64 字符串。

我的问题,我不知道如何将新字节[]“压缩”为 zip 格式。

public string ModifyZipContent(string base64) {
    ZipPackage zipPackage = null;
    MemoryStream memoryStream = null;

    long lenght;

    byte[] data = Convert.FromBase64String(base64);
    byte[] buffer;
    byte[] newData;

    int arrayOffset = 0;

    memoryStream = new MemoryStream();
    memoryStream.Write(data, 0, data.Length);

    zipPackage = (ZipPackage)Package.Open(memoryStream, FileMode.Open);

    PackagePartCollection zipParts = zipPackage.GetParts();

    // this is awful
        foreach(ZipPackagePart zipPart in zipParts) {
            using(Stream stream = zipPart.GetStream()) {
                arrayOffset += (int)stream.Length;
            }
        }

        newData = new byte[arrayOffset];
    // end

    arrayOffset = 0;
    foreach(ZipPackagePart zipPart in zipParts) {
        using(Stream stream = zipPart.GetStream()) {
            lenght = stream.Length;
            buffer = new byte[lenght];

            stream.Read(buffer, 0, (int)lenght);

            Buffer.BlockCopy(buffer, 0, newData, arrayOffset, buffer.Length);
            arrayOffset += buffer.Length;
        }
    }

    return Convert.ToBase64String(newData);
}

【问题讨论】:

  • PS:在这种特殊情况下,我不会对数据进行任何更改,因为我想知道新的 base64 字符串是否等于旧字符串,所以,如果是真的,我可以进行更改.
  • 仅供参考,将 byte[] 转换为 base64 不会“压缩”它 - 它实际上会导致 33% 更大 数组。它采用原始二进制数据并编码为 ASCII 字符的子集。
  • 似乎 File.WriteAllBytes 完成了所有工作,但我无法使用它,因为我无法访问磁盘,我需要在内存中“即时”执行并返回修改后的邮编。我正在努力解释自己,如果我不能解释,对不起

标签: c# .net


【解决方案1】:

我还没有完全测试过这个,但是这些方面的东西应该可以工作......

// Requires System.IO.Compression using statement.

byte[] bytes = new byte[256]; // Your byte[] would be here instead of this empty one.
using (var zipFile = ZipFile.Open("C:/ZipFile.zip", ZipArchiveMode.Update))
{
    var entry = zipFile.CreateEntry("YourEntryPathHere");
    using (var stream = entry.Open())
    {
        stream.Write(bytes, 0, bytes.Length);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多