Поделиться через


Функции-члены входного потока

Функции-члены входного потока используются для ввода диска.Функции-члены включают:

  • Открытая функция для входных потоков

  • Функция 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;
}

f5tsy854.collapse_all(ru-ru,VS.110).gifВвод

1234

f5tsy854.collapse_all(ru-ru,VS.110).gifПример результатов выполнения

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;
}

f5tsy854.collapse_all(ru-ru,VS.110).gifВвод

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 деструктор закрывает файл, но можно использовать закрыть функция если нужно открыть другой файл для одного и того же объекта потока.

См. также

Ссылки

Входные потоки