[C++] Najszybszy algorytm odczytywania z pliku

W tym przypadku nic więcej, tylko że z tego CRLF wynika różnica długości.

Eee nie rozumiem za bardzo. Zapisuję bez trybu binarnego, więc ‘\n’ jest zamieniane na “\r\n”. Przy czytaniu “\r\n” jest zamieniane na ‘\n’. Więc na jedno wychodzi.

Jak już to zrobię resize(dlugosc+1) - wtedy null znajdzie się na końcu stringu, ale i tak uważam, że pewnie null i tak dodawany jest tam automatycznie (w wywołaniu c_str()).

Jeżeli w pliku zapisano “a\r\nb\r\n\c\r\n” to przez tellg() wyliczysz rozmiar 9 przy odczycie w trybie tekstowym odczytane zostanie 6 znaków więc zmienna będzie zawierać “a\nb\n\c\n” 6 znaków a dalej 3 znaki śmieci.

dlugosc+1 dotyczyła przypadku new char[dlugosc+1]

w Przypadku resize() podajesz ilość znaków, czyli tylko dlugosc.

Aha to teraz rozumiem - dzięki trybowi binarnemu wczytamy nie 6 (bo nie ma zamiany), a 9 znaków - i wszystko będzie OK. O to Ci chodziło :?:

Dokładnie.

Nie będzie żadnych śmieci :slight_smile:

:arrow: http://cplusplus.com/reference/string/string/resize/

Przy użyciu napisu przez zawartosc.c_str() - owszem nie będzie, zaś przy użyciu jako string - zawartosc.length() zwróci tyle ile podano w zawartosc.resize().

Owszem można po wczytaniu zapodać: zawartosc.resize(strlen(zawartosc.c_str())); ale chyba prościej użyć trybu binarnego.

Nie rozumiem o co Ci chodzi.

zawartosc.resize(strlen(zawartosc.c_str())); [/code]

Po co mam to dawać :?:

Aby zawartosc.length() była równa strlen(zawartosc.c_str())

Ja mam jeszcze pytanie odnośnie:

skoro są różnice w kodowaniu niektórych znaków w tych stronach kodowych to nie można ustawić kodowania w pliku i w konsoli na to samo :?:

Używając WinApi możesz ustawić kodowanie znaków na konsoli.

Pod unixem nie ma takiej możliwości musisz przekodowywać w programie.

Nie możesz zgadnąć w jakim kodowaniu jest zapisany plik (no chyba że ta informacja jest zapisana do tego pliku).

Nie?

Hmmm… ja kiedyś coś takiego pisałem i nawet działało :slight_smile:

Jeśli w pliku jest polski tekst i znamy tablice kodowań znaków, to wczytując plik możemy odrzucać te kodowania, spoza których znaki znajdziemy. No, ale nie daje to całkowitej pewności, tzn. są sytuacje, w których może pasować kilka kodowań.

Czy nie wydaje ci się że sam sobie przeczysz?

Nie - jak pasowało klika, to dopasowywało kilka, a błędne odrzucało zawsze.

Więc jest tak jak napisałem: - “Nie możesz zgadnąć w jakim kodowaniu jest zapisany plik”. Ale można dopasować kilka i/lub odrzucić błędne, tu się zgadzam.