Функции-члены входного потока
Функции-члены входного потока используются для ввода диска.Функции-члены включают:
Открытая функция для входных потоков
Функция get
Функция getline
Функция чтения
Функции seekg и tellg
Функция " закрыть " для входных потоков
Открытая функция для входных потоков
При использовании файловый поток (ifstream), необходимо связать этот поток с определенным файлом на диске.Можно сделать это в конструкторе или можно использовать открытие функция.В любом случае аргументы.
Обычно указывается ios_base:: openmode пометить при открытии файла, связанного с входным потоком (режимом по умолчанию ios:: IN).Список open_mode флаги, см. в разделе открытая функция.Флаги могут быть объединены с побитовое ИЛИ ( | оператор).
Для считывания файла используйте сначала ошибка функция-член, чтобы определить, существует ли он.
istream ifile( "FILENAME" );
if ( ifile.fail() )
// The file does not exist ...
Функция get
Неформатированное получить функция-член работает как >> оператор с 2 исключениями.Сначала получить функция включает пустые значения, в то время как исключает пробелы при экстрактор skipws пометить набор (по умолчанию).Во-вторых, получить функция менее большой связанный поток вывода (вызватьcout, например) потопленным.
Изменение получить функция задает адрес буфера и максимальное число знаков для чтения.Это полезно для ограничения количества символов, отправленных на определенной переменной, так как в этом примере показано следующее.
// 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 функция-член аналогичен получить функция.Обе функции позволяют третий аргумент, указывающий конечный символ для ввода.Значение по умолчанию - символ новой строки.Обе функции резервируют один символ для нужного конечного знака.Однако получить конечный символ в поток и оставляет 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 реализация запись-ориентировал система управления данными, умножает размер фиксированной длины запись рекордным числом, чтобы получить позицию байта относительно конец файла, а затем использует получить объект для считывания запись.
tellg функция-член возвращает позицию текущего файла для чтения.Это значение типа streamposa 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 деструктор закрывает файл, но можно использовать закрыть функция если нужно открыть другой файл для одного и того же объекта потока.