Zdravím,
Chtěl bych se zeptat jak udělat "dobře" binární zápis podle "nějakého" vzoru,
např: ID (30znaků), Size (Long hodnota), MemoryStream o velikosti Size (předchozí long hodnota).
Když jsem udělal
string g = bin.GraphicID.PadRight(30);
w.Write(g);
w.Write((long)bin.Size);
w.Write((byte[])bin.Graphic.ToArray());
Tak při načítání mě to hodí ke stringu (na začátek) nějaký znaky (\u001e) a přečte to špatnou velikost size (takže ve výsledku nemůžu číst dál)
string a = Encoding.UTF8.GetString(r.ReadBytes(30));
long size = BitConverter.ToInt64(r.ReadBytes(8), 0);
MemoryStream s = new MemoryStream();
byte[] bb = r.ReadBytes((int)size);
s.Write(bb, 0, bb.Length);
s.Seek(0, SeekOrigin.Begin);
using (FileStream fs = new FileStream(a.Trim() + ".png", FileMode.OpenOrCreate))
{
s.CopyTo(fs);
fs.Flush();
}
Poradíte mi jak tohle elegantně vytvořit tak aby to zapisovalo i četlo korektně?
Mě třeba napadlo si předem nadefinovat struct, který by měl jasně daný velikosti všeho, ale to jsme vypustil protože MemoryStream dopředu neznám velikost.
Díky
PS. Jedná se o zápis ID a Png souborů do jednoho dat. souboru.