Я изучаю C++, и сейчас я создал файл, который выполняет некоторые шифрования/дешифрования. После того как я закончил со всем, я хочу узнать, насколько файл сжат/распакован. Поэтому я решил подсчитать символы во входном и выходном файлах, но вот где он начинает идти не так.Подсчет символов в txt-файле, дающий неверный счет
int get_compression(string file1, string file2){
string line = "";
ifstream stream1(file1.c_str());
double counter1 = 0.0;
while(getline(stream1, line)){
counter1 += line.length();
}
stream1.close();
cout << counter1 << "\n";
ifstream stream2(file2.c_str());
double counter2 = 0.0;
while(getline(stream2, line)){
counter2 += line.length();
}
stream2.close();
cout << counter2 << "\n";
return (counter2/counter1)*100;
}
Я добавил два cout
заявления, чтобы увидеть, что он рассчитывал, но он говорит мне, что насчитал 496 символов во входном текстовом файле, который действительно имеет 528 символов, и 481 символов в текстовом файле, который имеет 785 символов. Я где-нибудь совершил ошибку?
'getline' отбрасывается конца-строки символов. Это может быть два символа на операционных системах. Для надежного подсчета используйте 'fstat'. – usr2564301
@Jongware Мне было бы неплохо, если бы счет был отключен двумя символами, но он отключен несколькими сотнями с моим выходным txt-файлом. – Chronicle
Вам также нужно будет открыть файл в двоичном режиме, так как если в текстовом режиме вы получите некоторые автоматические переводы, скрывающие байты. – RichardPlunkett