0

Имеется бинарный файл размером 104,688,605 байт.

Читаю его в цикле:

ifstream fs("1.cnv",ios::binary); 
int counter = 0;
char c;
while (fs>>c){
   counter++;
}

cout<<counter<<endl;

В итоге получаю 101,914,339 байт. Где еще 3 тысячи?

Следующие вариации цикла дают точно такой же результат:

while (!fs.eof()) {
        fs>>c;



while (fs.good) {
        fs>>c;
Harry
  • 221,325

1 Answers1

2

Для того, чтобы читались все символы, нужно указать, что пробельные символы тоже нужно читать:

int counter = 0;
char c;
fs >> noskipws;
while (fs>>c){
    counter++;
}

Обратите внимание на fs >> noskipws;.

Вариант

while (!fs.eof()) {

будет работать неверно, потому что eof() сработает только после неудавшегося чтения за концом файла (см. этот вопрос), а

while (fs.good) {

тем более - потому что fs.good - это не вызов функции :)

P.S. Но если вдруг вам нужен просто размер файла - то для этого есть свои способы, не требующие чтения...

Harry
  • 221,325
  • 1
    Я думаю, что while (fs.good) просто опечатка, ит что автор хотел написать while (fs.good()). – Mikhajlo Dec 11 '19 at 09:53