Latest web development tutorials

C ++ pliki i strumienie

Do tej pory użyliśmy standardowej bibliotekiiostream, która zapewnia metody cinicoutstrumieniowe są używane do odczytu ze standardowego wejścia i zapisywać do standardowego strumienia wyjściowego.

Ten poradnik pokazuje, jak odczytywać i zapisywać pliki ze strumienia do strumienia plików. To miejsce, gdzie kolejnyfstream C ++ Standardowa biblioteka,definiuje trzy nowe typy danych:

数据类型 描述
ofstream 该数据类型表示输出文件流,用于创建文件并向文件写入信息。
ifstream 该数据类型表示输入文件流,用于从文件读取信息。
fstream 该数据类型通常表示文件流,且同时具有 ofstream 和 ifstream 两种功能,这意味着它可以创建文件,向文件写入信息,从文件读取信息。

Aby złożyć obsługi w języku C ++, musisz dołączyć plik nagłówka w C ++ pliku kodu źródłowego <iostream> i <fstream>.

Otwórz plik

Przed zapoznaniem się z informacjami z pliku lub zapisać do pliku, należy najpierw otworzyć plik.ofstream i fstreamobiekty mogą być wykorzystane do otwarcia pliku do pisania, jeśli tylko trzeba otworzyć plik do czytania, użyć obiektuifstream.

Oto funkcja open () jest składnia standard, funkcja open () jest członkiem fstream, ifstream i ofstream obiektów.

void open(const char *filename, ios::openmode mode);

Tutaj open () Funkcja członkiem pierwszego parametru, aby określić nazwę i lokalizację pliku, który chcesz otworzyć, a drugi parametr określa plik jest tryb otwarty.

模式标志 描述
ios::app 追加模式。所有写入都追加到文件末尾。
ios::ate 文件打开后定位到文件末尾。
ios::in 打开文件用于读取。
ios::out 打开文件用于写入。
ios::trunc 如果该文件已经存在,其内容将在打开文件之前被截断,即把文件长度设为 0。

Można zastosować kombinację dwu lub więcej z powyższych sposobów. Na przykład, jeśli chcesz otworzyć plik w trybie zapisu i chce obciąć plik, aby zapobiec plik już istnieje, można użyć następującej składni:

ofstream outfile;
outfile.open("file.dat", ios::out | ios::trunc );

Podobnie, jeśli chcesz otworzyć plik do odczytu i zapisu, można użyć następującej składni:

fstream  afile;
afile.open("file.dat", ios::out | ios::in );

Zamknij plik

Gdy program C ++ kończy, to wyłącz automatyczne odświeżanie wszystkich strumieni i uwolnić przydzieloną pamięć i zamknąć wszystkie otwarte pliki. Ale programiści powinni opracować dobry zwyczaj, zanim program kończy się zamknąć wszystkie otwarte pliki.

Oto funkcja close () Składnia standard, blisko function () jest członkiem fstream, ifstream i ofstream obiektów.

void close();

Zapis do pliku

W programowania C ++, używamy operatora strumienia wstawiania (<<), aby zapisywać informacje do pliku, podobnie jak przy użyciu informacji wyjściowych do operatora na tym samym ekranie. Jedyną różnicą jest to, że tutaj używaszofstream lub obiekt fstreamzamiast obiektucout.

Przeczytaj plik

W programowania C ++, używamy operatora ekstrakcji strumienia (>>), aby odczytać informacje z pliku, tak jak za pomocą informacji wejściowych operatora z klawiatury. Jedyną różnicą jest to, że tutaj używaszifstream lub fstreamobiekt zamiastCINobiektu.

Odczyt i zapis przykłady

Poniższy program w C ++, aby otworzyć plik w trybie odczytu i zapisu. Po zapisu pliku afile.dat informacji wprowadzonych przez użytkownika, program odczytuje informacje z pliku i wyjście do ekranu:

#include <fstream>
#include <iostream>
using namespace std;
 
int main ()
{
    
   char data[100];

   // 以写模式打开文件
   ofstream outfile;
   outfile.open("afile.dat");

   cout << "Writing to the file" << endl;
   cout << "Enter your name: "; 
   cin.getline(data, 100);

   // 向文件写入用户输入的数据
   outfile << data << endl;

   cout << "Enter your age: "; 
   cin >> data;
   cin.ignore();
   
   // 再次向文件写入用户输入的数据
   outfile << data << endl;

   // 关闭打开的文件
   outfile.close();

   // 以读模式打开文件
   ifstream infile; 
   infile.open("afile.dat"); 
 
   cout << "Reading from the file" << endl; 
   infile >> data; 

   // 在屏幕上写入数据
   cout << data << endl;
   
   // 再次从文件读取数据,并显示它
   infile >> data; 
   cout << data << endl; 

   // 关闭打开的文件
   infile.close();

   return 0;
}

Jeżeli powyższy kod jest kompilowany i wykonywany, produkuje następujące wejścia i wyjścia:

$./a.out
Writing to the file
Enter your name: Zara
Enter your age: 9
Reading from the file
Zara
9

Powyższe przykłady użyć dodatkowych funkcji obiektu cin, takich jak getline () odczytuje linię z zewnątrz, zignoruj ​​() Funkcja odczytuje oświadczenie przed opuszczeniem się dodatkowe znaki są ignorowane.

wskaźnik pozycji pliku

istream i ostreamzapewniają funkcje członków do położenia pozycję wskaźnika pliku. Należą do nich o iStream funkcji członkowskichseekg ( "starać się") i na seekpostream( "Szukajcie put").

seekg seekp a argument jest zwykle długa całkowitą. Drugim parametrem może być wykorzystywane do określenia kierunku wyszukiwania. Znajdź kierunek może byćios :: beg (domyślnie, pozycjonowanie od początku strumienia), może to być ios :: cur (pozycjonowanieod aktualnej pozycji strumienia), może to byćios :: end (odkońca strumienia jest rozpoczęty pozycjonowanie).

wskaźnik pozycji pliku jest liczbą całkowitą, która określa liczbę bajtów od początku pliku do położenia wskaźnika. Tutaj jest kierowana "get" wskaźnik pozycji pliku instancji:

// 定位到 fileObject 的第 n 个字节(假设是 ios::beg)
fileObject.seekg( n );

// 把文件的读指针从 fileObject 当前位置向后移 n 个字节
fileObject.seekg( n, ios::cur );

// 把文件的读指针从 fileObject 末尾往回移 n 个字节
fileObject.seekg( n, ios::end );

// 定位到 fileObject 的末尾
fileObject.seekg( 0, ios::end );