2
Bir zip dosyası base64 dizesi alıyorum, byte [] öğesine dönüştürün, belleği açın, içeriği değiştirin ve sonra yeniden base64 dizesine yeni byte [] komutunu 'sıkıştırın'.C# - Sıkıştırılmış bayt []
Sorunum, yeni bayt [] 'ı zip biçimine nasıl "sıkıştıracağımı" bilmiyorum.
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: Ben istediğim için bu özel durumda, verilerde herhangi bir değişiklik yapmayın Yeni base64 dizesinin eskisine eşit olup olmadığını bilmek, yani eğer doğruysa, değişiklik yapabilirim. – KISKE
Olası çoğaltılabilir [ZipPackage'ı bir zip oluşturmak için nasıl kullanılır] (http://stackoverflow.com/questions/12888805/how-to-use-zippackage-to-create-a-zip) –
FYI bir bayt [ ] 'base64'e" sıkıştırmaz "- aslında% 33'lük bir _bigger_ dizisi ile sonuçlanır. Ham ikili verileri alır ve ASCII karakterlerinin bir alt kümesinde kodlar. –