Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Функции — члены потока ввода используются для дисковых операций ввода.
open
Если вы используете входной поток файлов (ifstream), необходимо связать этот поток с определенным файлом диска. Это можно сделать в конструкторе или использовать функцию open . В любом случае аргументы одни и те же.
Обычно при открытии файла, связанного с входным потоком ios_base::openmode (используется ios::inрежим по умолчанию). openmode Список флагов см. в разделе ios_base::openmode. Флаги можно объединить с побитовой "или" (|) оператором.
Чтобы прочитать файл, сначала используйте fail функцию-член, чтобы определить, существует ли она:
istream ifile("FILENAME");
if (ifile.fail())
// The file does not exist ...
get
Неформатированная get функция-член работает как >> оператор с двумя исключениями. Во-первых, 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
read
Функция-член read считывает байты из файла в указанную область памяти. Аргумент length определяет количество прочтенных байтов. Если этот аргумент не включен, чтение останавливается при достижении физического конца файла или в случае файла в текстовом режиме при чтении внедренного 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;
}
}
close
Функция-член close закрывает файл диска, связанный с входным потоком файлов, и освобождает дескриптор файла операционной системы. Деструктор ifstream закрывает файл, но можно использовать close функцию, если нужно открыть другой файл для одного объекта потока.