Strumienie byte oraz szerokie
Strumień bajtów traktuje plik jako sekwencję bajtów. W programie strumień jest identyczną sekwencją bajtów.
Natomiast szeroki strumień traktuje plik jako sekwencję uogólnionych znaków wielobajtowych, które mogą mieć szeroką gamę reguł kodowania. (Pliki tekstowe i binarne są nadal odczytywane i zapisywane zgodnie z wcześniejszym opisem). W programie strumień wygląda jak odpowiednia sekwencja szerokich znaków. Konwersje między dwiema reprezentacjami występują w standardowej bibliotece C. Reguły konwersji mogą być w zasadzie zmieniane przez wywołanie setlocale
, które zmienia kategorię LC_CTYPE
. Każdy strumień szeroki określa jego reguły konwersji w momencie, gdy staje się szeroko zorientowany, i zachowuje te reguły, nawet jeśli kategoria LC_CTYPE
później ulegnie zmianie.
Pozycjonowanie w szerokim strumieniu ma takie same ograniczenia jak w przypadku strumieni tekstowych. Ponadto wskaźnik położenia pliku może również mieć do czynienia z kodowaniem zależnym od stanu. Zazwyczaj zawiera zarówno przesunięcie bajtu w strumieniu, jak i obiekt typu mbstate_t
. W związku z tym jedynym niezawodnym sposobem uzyskania pozycji pliku w szerokim strumieniu jest wywołanie metody fgetpos
, a jedynym niezawodnym sposobem przywrócenia pozycji uzyskanej w ten sposób jest wywołanie metody fsetpos
.