2
Я получаю строку base64 zip-файла, преобразовываю в байт [], открываю в памяти, изменяю содержимое и затем снова сжимаю новый байт [] на строку base64.C# - Compress byte []
Моя проблема, я не знаю, как «сжать» новый байт [] в формат 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 строка старой, поэтому, если это правда, я могу вносить изменения. – KISKE
Возможный дубликат [Как использовать ZipPackage для создания zip] (http://stackoverflow.com/questions/12888805/how-to-use-zippackage-to-create-a-zip) –
FYI преобразование 'byte [ ] 'to base64 не« сжимает »его - на самом деле это приводит к 33% _bigger_ массиву. Он берет необработанные двоичные данные и кодирует в подмножестве символов ASCII. –