BinaryWriter/BinaryReader – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

BinaryWriter/BinaryReader – .NET – Fórum – Programujte.comBinaryWriter/BinaryReader – .NET – Fórum – Programujte.com

 

Mutagen
~ Anonymní uživatel
549 příspěvků
1. 12. 2017   #1
-
0
-

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.

Nahlásit jako SPAM
IP: 193.138.154.–
gna
~ Anonymní uživatel
1891 příspěvků
1. 12. 2017   #2
-
0
-

BinaryWriter.Write Method (String)

Writes a length-prefixed string to this stream in the current encoding of the BinaryWriter...

Zapiš ten string jako pole bajtů, jak potřebuješ.

Nahlásit jako SPAM
IP: 213.211.51.–
Mutagen
~ Anonymní uživatel
549 příspěvků
1. 12. 2017   #3
-
0
-

#2 gna
Heh, tak to vyřešilo celej problém   Taková blbost   

Nahlásit jako SPAM
IP: 193.138.154.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 56 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý