zviGood אתה מאוד משמח אותי בזה שאתה מתקדם לבד וכמובן גם על המחמאות :)...
בקוד שלך הקטע של הStringBuilder מיותר, במקומו עליך לכתוב ככה:
return Encoding.UTF8.GetString(value);
אבל עיקר הבעיה של הקוד זה אורכו של המשתנה value. הוא באותו אורך של המקור, והמקור קצר בשל דחיסותו. אז איזה אורך לעשות? אפשר לעשות אורך כפול וקיצוץ לבסוף, אבל פחחח.. זה לא דרך. בדרך כלל משתמשים בMemoryStream, אבל פה שגם רוצים לקודד את הבתים, אז זה בדיוק תפקידו של הStreamReader ("קורא זרם בתים לקידוד מסויים"), ככה:
public static string UnZip(byte[] value)
{
using (var ms = new System.IO.MemoryStream(value))
using (var sr = new System.IO.Compression.GZipStream(ms, System.IO.Compression.CompressionMode.Decompress))
using (var strReader = new StreamReader(sr, Encoding.UTF8))
return strReader.ReadToEnd();
}
פורסם במקור בפורום CODE613 ב02/09/2015 17:20 (+03:00)