[ Shadowed @ 14.05.2007. 19:47 ] @
Code:
Dim i As String = "bla"
        Dim mystream As New System.IO.BinaryWriter(New System.IO.FileStream("I:\blah.txt", IO.FileMode.Create, IO.FileAccess.Write))
        mystream.Write(i)
        mystream.Close()

Napravi fajl od 4 bajta - 03 62 6C 61. Poslednja 3 bajta odgovaraju karakterima iz stringa. Ukoliko string ima 4 karaktera, prvi bajt ima vrednost 04 itd. dok ne predje 255 karaktera, onda ima dva dodatna bajta na pocetku.
E sad, zasto li se to desava i mogu li nekako da izbegnem?

I jos jedno pitanje usput. Trebam da u fajl upisujem podatke na sledeci nacin:
jedan red je neki broj, zatim idu binarni podaci poznate duzine, pa opet u novom redu broj (pa prelazak u novi red) pa binarni podaci poznate (jednake prethodnoj) duzine.
Koji mi je najbolji nacin za ovo? Uglavnom stream-ovi mogu WriteLine ali ne WriteBytes ili obrnuto. Naravno, mogu da pretvorim Integer u string pa da karakter po karakter upisujem byte-ove, ali bih voleo neki "lepsi" nacin.
[ dusans @ 14.05.2007. 21:29 ] @
Ovo prvo je nacin na koji binary writter ispisuje string (length prefixed), to verovatno ne mozes da promeniš, takva je implementacija
ali ako hoceš da baš ovo upiseš, znači samo 3 karaktera probaj da upiseš niz bajtova (umesto stringa) koje ćeš za taj string dobiti funkcijom GetBytes(i) nekog Encoding objekta (npr ASCII)

Ovo drugo, u ovom trenutku mi pada jedno rešenje (ne znam da li je najbolje) a to je da napraviš dva Writer-a koja
koriste isti FileStream i onda da pozivaš jedan od njih kada upisuješ binarne podatke a drugi kad upisuješ tekstualne (npr. BinaryWriter i StreamWriter)
ili pak da korisits samo postojeci BinaryWriter kom ces davati nizove bajtova umesto string podataka (kao što je gore napisano).

Pozdrav!