Функции-члены потока ввода
Функции-члены входного потока используются для ввода диска. Функции-члены включают:
Открытая функцию для входных потоков
Функция получение
Функция getline
Функция прочесть
Функции seekg и tellg
Близкая функцию для входных потоков
Открытая функцию для входных потоков
При использовании файловый поток (ifstream), необходимо связать этот поток с определенным дисковым файлом. Это можно сделать в конструкторе, или можно использовать функцию open. В любом случае аргументы одинаково.
Обычно определяется флажок ios_base::openmode при открытии файла, связанный с входным потоком (режим по умолчанию ios::in). Для списка флажки open_mode см. в разделе Открытая функция. Флажки можно объединять с побитовое ИЛИ ( | оператор).
Для считывания файла сначала используйте функции-члена Не пройдено, чтобы определить, существует ли он:
istream ifile( "FILENAME" );
if ( ifile.fail() )
// The file does not exist ...
Функция получение
Unformatted функцию-член get работает так же, как и оператор >> с 2 исключениями. Во-первых, функция get содержит символы пробела, а экстрактор исключает пространство, если установлен флажок skipws (по умолчанию). Во-вторых, функция get, скорее всего, не связанный поток вывода (cout, например), потопленным.
Вариант функции get указывает адрес буфера и максимальное количество символов для чтения. Это полезно для ограничения количества символов, отправляемых в определенной переменной, как показано в следующем примере:
// ioo_get_function.cpp
// compile with: /EHsc
// Type up to 24 characters and a terminating character.
// Any remaining characters can be extracted later.
#include <iostream>
using namespace std;
int main()
{
char line[25];
cout << " Type a line terminated by carriage return\n>";
cin.get( line, 25 );
cout << line << endl;
}
Ввод
1234
Пример результатов выполнения
1234
Функция getline
Функцию-член getline аналогична функции get. Обе функции позволяют третий аргумент, определяющий конечный символ для ввода. Значение по умолчанию — символ новой строки. Обе функции резервируют один символ требуемого конечное символов. Однако get оставляет конечный символ в поток и getline удаляет конечный символ.
В следующем примере определяется конечный символ для входного потока.
// getline_func.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
int main( )
{
char line[100];
cout << " Type a line terminated by 't'" << endl;
cin.getline( line, 100, 't' );
cout << line;
}
Ввод
test
Функция прочесть
Функцию-член чтение считывает байт из файла в определенной области памяти. Аргумент длины определяет количество прочитанных байтов. Если не указать этот аргумент, чтения останавливается при достижении конца физического файла или, в случае файла текст- режиме, когда встроенный символ EOF читается.
В данном примере демонстрируется чтение бинарную запись из файла зарплаты в структуру:
#include <fstream>
#include <iostream>
using namespace std;
int main()
{
struct
{
double salary;
char name[23];
} employee;
ifstream is( "payroll" );
if( is ) { // ios::operator void*()
is.read( (char *) &employee, sizeof( employee ) );
cout << employee.name << ' ' << employee.salary << endl;
}
else {
cout << "ERROR: Cannot open file 'payroll'." << endl;
}
}
Программа высказывать записи данных форматируется точно, определенные структурой без выполнения символы возврата каретки и перевода строки.
Функции seekg и tellg
Файловых потоков ввода хранит внутренний указатель на позиции в файле, в которой данные быть чтение далее. Необходимо установить этот указатель с функцией seekg, как показано ниже:
#include <iostream>
#include <fstream>
using namespace std;
int main( )
{
char ch;
ifstream tfile( "payroll" );
if( tfile ) {
tfile.seekg( 8 ); // Seek 8 bytes in (past salary)
while ( tfile.good() ) { // EOF or failure stops the reading
tfile.get( ch );
if( !ch ) break; // quit on null
cout << ch;
}
}
else {
cout << "ERROR: Cannot open file 'payroll'." << endl;
}
}
Для использования seekg реализовать ориентированные на запись системы управления данными, умножение размер фиксированной длины записи регистрировать числом для получения байтовую положение относительно конец файла, а затем использовать объект get для чтения записи.
Функция-член tellg возвращает позицию текущего файла для чтения. Значение типа streampos, typedef указанного недопустимо <iostream>. В следующем примере считывается файл и отображает сообщения, указывающее позицию пробелов.
#include <fstream>
#include <iostream>
using namespace std;
int main( )
{
char ch;
ifstream tfile( "payroll" );
if( tfile ) {
while ( tfile.good( ) ) {
streampos here = tfile.tellg();
tfile.get( ch );
if ( ch == ' ' )
cout << "\nPosition " << here << " is a space";
}
}
else {
cout << "ERROR: Cannot open file 'payroll'." << endl;
}
}
Близкая функцию для входных потоков
Функцию-член закрыть закрывает дисковый файл, связанный с файловыми потоком ввода и освобождает дескриптор файла операционной системы. Деструктор ifstream закрывает файл автоматически, но можно использовать функцию закрыть, если необходимо открыть другой файл для объекта того же самого потока.