ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
23 ноября
1168159
Dingo (26.01.2022 07:27, просмотров: 3148)
Пробую активней использовать C++, мысли вслух, натолкнулся 

на неочивдноедля меня поведение. (щас ис професии погонют опять)

Простейшее действие - прочитать файл.

	std::fstream fin;
	short int buf[2];
	char ch;
	int k=0;

	fin.open( "RO_.raw", std::fstream::in | std::fstream::binary);
	std::cout << "Pos: " << fin.tellg();
	while(!fin.eof()) {
		fin.read( reinterpret_cast<char *>(buf), sizeof(buf) );
		std::cout << buf[0] << std::endl;
		std::cout << buf[1] << std::endl;
		k++;
	} 
	fin.close();
	std::cout << "Read blocks: " << k << std::endl;

Выдаёт счётчик итераций больше на 1. Читаю описание eof здесь :

This flag is set by all standard input operations when the End-of-File is reached in the sequence associated with the stream.

Вроде понято - достигли конца файла - взвели. На деле не взводится, пока нет попытки чтения за концом файла. Возможно, это при блочном чтении, при посимвольном взведёт и на последнем. Проверил, предположение ложное.


В описании open() предлагается делать так:

// get length of file: 
is.seekg (0, is.end);
int length = is.tellg();
is.seekg (0, is.beg);