Giriş Akışı Üye İşlevleri

Giriş akışı üye işlevleri disk girişi için kullanılır.

open

Giriş dosyası akışı ()ifstream kullanıyorsanız, bu akışı belirli bir disk dosyasıyla ilişkilendirmeniz gerekir. Bunu oluşturucuda yapabilir veya işlevini kullanabilirsiniz open . Her iki durumda da bağımsız değişkenler aynıdır.

Genellikle bir giriş akışıyla ilişkili dosyayı açtığınızda bir ios_base::openmode bayrak belirtirsiniz (varsayılan moddur ios::in). Bayrakların openmode listesi için bkz ios_base::openmode. . Bayraklar bit düzeyinde "veya" (|) işleciyle birleştirilebilir.

Bir dosyayı okumak için önce üye işlevini kullanarak fail var olup olmadığını belirleyin:

istream ifile("FILENAME");

if (ifile.fail())
// The file does not exist ...

get

Biçimlendirilmemiş get üye işlevi, iki özel durumla işleç gibi >> çalışır. İlk olarak işlev get boşluk karakterleri içerirken, bayrak ayarlandığında ayıklayıcı boşluk skipws dışlar (varsayılan). İkincisi, işlevin get bağlı bir çıkış akışının (coutörneğin) boşaltılması olasılığı daha düşüktür.

İşlevin get bir varyasyonu bir arabellek adresi ve okunacak en fazla karakter sayısını belirtir. Bu, bu örnekte gösterildiği gibi belirli bir değişkene gönderilen karakter sayısını sınırlamak için kullanışlıdır:

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

Giriş

1234

Örnek Çıkış

1234

getline

getline Üye işlevi işlevine get benzer. Her iki işlev de giriş için sonlandırıcı karakteri belirten üçüncü bir bağımsız değişkene izin verir. Varsayılan değer yeni satır karakteridir. her iki işlev de gerekli sonlandırıcı karakter için bir karakter ayırır. Ancak, get sonlandırıcı karakteri akışta bırakır ve getline sonlandırıcı karakteri kaldırır.

Aşağıdaki örnek, giriş akışı için sonlandırıcı bir karakter belirtir:

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

Giriş

test

read

read Üye işlevi, bir dosyadaki baytları belirtilen bellek alanına okur. Uzunluk bağımsız değişkeni okunan bayt sayısını belirler. Bu bağımsız değişkeni eklemezseniz, dosyanın fiziksel sonuna ulaşıldığında veya metin modu dosyası söz konusu olduğunda eklenmiş EOF bir karakter okunduğunda okuma durur.

Bu örnek, bordro dosyasından bir yapıya ikili kayıt okur:

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

Program, veri kayıtlarının sonlandırıcı satır başı veya satır besleme karakteri olmadan yapı tarafından tam olarak belirtildiği şekilde biçimlendirildiğini varsayar.

seekg ve tellg

Giriş dosyası akışları, dosyada verilerin bir sonraki okunacağı konuma yönelik bir iç işaretçi tutar. Bu işaretçiyi seekg burada gösterildiği gibi işleviyle ayarlarsınız:

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

Kayıt odaklı veri yönetimi sistemlerini uygulamak için kullanmak seekg için, sabit uzunluktaki kayıt boyutunu kayıt numarasıyla çarparak dosyanın sonuna göre bayt konumunu alın ve ardından nesneyi kullanarak get kaydı okuyun.

tellg Üye işlevi, okumak için geçerli dosya konumunu döndürür. Bu değer, içinde tanımlanan türündedirstreampostypedef.<iostream> Aşağıdaki örnek bir dosyayı okur ve boşlukların konumlarını gösteren iletileri görüntüler.

#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 Üye işlevi bir giriş dosyası akışıyla ilişkili disk dosyasını kapatır ve işletim sistemi dosya tutamacını serbestleştirir. Yıkıcı ifstream dosyayı sizin için kapatır, ancak aynı akış nesnesi için başka bir dosya açmanız gerekiyorsa işlevini kullanabilirsiniz close .

Ayrıca bkz.

Giriş Akışları