Latest web development tutorials

C ++ 파일 및 스트림

지금까지 우리는CIN 및 COUT스트림 방법은 표준 입력에서 읽고 표준 출력 스트림에 기록하는 데 사용됩니다 제공하는 표준iostream라이브러리를 사용하고 있습니다.

이 튜토리얼은 어떻게 읽고 파일을 스트리밍 할 스트림에서 파일을 작성하는 방법을 보여줍니다. 또 다른 C ++ 표준 라이브러리fstream, 그것은 세 가지 새로운 데이터 유형을 정의하는 곳이다 :

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

C ++에서 처리 파일을하려면 C ++ 소스 코드 파일 <iostream>와 <fstream>에서 헤더 파일을 포함해야합니다.

파일을 엽니 다

파일에 파일에서 정보를 읽거나 쓰기 전에 먼저 파일을 열어야합니다.ofstream 그리고 fstream목적은, 읽기 위해 파일을 열ifstream 객체를사용해야하는 경우, 쓰기 위해 파일을 열 수 있습니다.

여기에 열려 () 함수는 표준 구문은 오픈 () 함수는 fstream, ifstream과 ofstream 객체의 멤버이다.

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

여기에서, 첫 번째 매개 변수의 개방 () 멤버 함수는 열려는 파일의 이름과 위치를 지정하고, 두 번째 매개 변수는 파일 모드로 열릴 정의합니다.

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

사용자는 상기 모드의 2 종 이상을 조합하여 사용할 수있다. 당신이 쓰기 모드에서 파일을 열고 파일이 이미 존재하는 것을 방지하기 위해 파일을 절단하고자 할 경우, 예를 들어, 다음과 같은 구문을 사용할 수 있습니다 :

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

당신이 읽기, 쓰기 위해 파일을 열려면 마찬가지로, 당신은 다음과 같은 구문을 사용할 수 있습니다 :

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

파일을 닫습니다

는 C ++ 프로그램이 종료 될 때 자동으로 꺼 모든 스트림을 새로 고침, 모든 할당 된 메모리를 해제하고 열려있는 모든 파일을 닫습니다. 프로그램이 열려있는 모든 파일을 종료하기 전에 그러나 프로그래머들은 좋은 습관을 개발해야한다.

여기에 가까운 () 함수는 표준 구문은, 가까운 () 함수는 fstream, ifstream과 ofstream 객체의 멤버이다.

void close();

파일에 쓰기

프로그래밍은 C ++에서, 우리는 같은 화면의 조작에 대한 출력 정보를 이용하여 같은 정보를 파일에 기록하기 위해 스트림 삽입 연산자 (<<) 사용. 유일한 차이점은cout을 객체 대신 ofstream또는fstream 개체를사용하여 여기에 있다는 것입니다.

파일 읽기

는 C ++ 프로그래밍에서는 단지 키보드 조작 입력 정보를 사용하는 것과 같이, 파일로부터 정보를 판독하기 위해 스트림 추출 연산자 (>>) 사용. 유일한 차이점은fstream 또는 대신 CIN객체의ifstream 객체를사용하여 여기에 있다는 것입니다.

읽기 및 예 쓰기

다음 C ++ 프로그램은 읽기 - 쓰기 모드에서 파일을 엽니 다. 사용자가 입력 한 정보 afile.dat 파일에 기입 한 후에, 프로그램 화면에 출력 파일로부터 정보를 읽

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

상기 코드는 컴파일되고 실행되면 다음 입력과 출력을 생성한다 :

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

위의 예제의 getline () 함수는 외부로부터 라인을 읽는 등의 부가 기능 CIN 객체를 사용, 기능이 무시됩니다 추가 문자를 떠나기 전에 문을 읽습니다 () 무시합니다.

파일 위치 포인터

IStream을하고 ostream에 파일포인터 위치에 대한 위치 조정 부재의 기능을 제공한다. 다음은( "넣어 시크") ( "얻을 추구")과ostream에의seekp에seekg의 IStream을 멤버 함수에 대한있습니다.

seekg seekp 인수는 일반적으로 긴 정수입니다. 두 번째 매개 변수는 검색의 방향을 지정하는 데 사용할 수 있습니다. 찾기 방향은이IOS :: CUR (스트림의 현재 위치로부터 위치 설정)될 수 있고, 그 시작 스트림의끝에서 IOS :: 말단 (일(스트림의선두부터의 위치를기본) IOS :: BEG수 있습니다 위치 설정).

파일 위치 포인터는 포인터의 위치에 파일의 선두로부터의 바이트 수를 지정하는 정수 값. 여기에 "GET"파일 위치 포인터 인스턴스를 목표로하고있다 :

// 定位到 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 );