[C ++コアプログラミング] 5つのファイル操作

5ファイル操作

プログラムの実行時に生成されるデータは一時的なデータであり、プログラムが終了すると解放されます。

データはファイルを介して永続できます

C ++でのファイル操作には、ヘッダーファイルを含める必要があります <fstream>

ファイルには次の2つのタイプがあります。

  1. テキストファイル-ファイルテキストASCIIコードの形式でコンピュータに保存されます
  2. バイナリファイル-ファイルテキストのバイナリ形式でコンピュータに保存され、ユーザーは通常それらを直接読み取ることはできません

操作ファイルには、主に3つのカテゴリがあります。

  1. ofstream:書き込み操作
  2. ifstream:読み取り操作
  3. fstream:読み取りおよび書き込み操作

5.1テキストファイル

5.1.1ファイルの書き込み

ファイルを書き込む手順は次のとおりです。

  1. ヘッダーファイルをインクルードする

    #include <fstream>

  2. ストリームオブジェクトを作成します

    ofstream ofs;

  3. ファイルを開く

    ofs.open( "ファイルパス"、openメソッド);

  4. データを書き込む

    ofs << "書き込まれたデータ";

  5. ファイルを閉じる

    ofs.close();

ファイルを開く方法:

オープンメソッド 説明
ios :: in 読むためにファイルを開く
ios :: out 書き込み用にファイルを開く
ios :: ate 初期位置:ファイルの終わり
ios :: app 追加モードでファイルを書き込む
ios :: trunc ファイルが存在する場合は、最初に削除してから作成します
ios :: binary バイナリーウェイ

注:ファイルを開く方法は、|演算子と組み合わせて使用​​できます。

**例:**バイナリモードでファイルを書き込む ios::binary | ios:: out

例:

#include <fstream>

void test01()
{
	ofstream ofs;
	ofs.open("test.txt", ios::out);

	ofs << "姓名:张三" << endl;
	ofs << "性别:男" << endl;
	ofs << "年龄:18" << endl;

	ofs.close();
}

int main() {

	test01();

	system("pause");

	return 0;
}

総括する:

  • ファイル操作には、ヘッダーファイルfstreamを含める必要があります
  • ファイルの読み取りには、ofstreamまたはfstreamクラスを使用できます
  • ファイルを開くときは、操作ファイルのパスと開く方法を指定する必要があります
  • <<を使用してファイルにデータを書き込みます
  • 操作が完了したら、ファイルを閉じます

5.1.2ファイルの読み取り

ファイルの読み取りはファイルの書き込みに似ていますが、読み取る方法は他にもあります

ファイルを読み取る手順は次のとおりです。

  1. ヘッダーファイルをインクルードする

    #include <fstream>

  2. ストリームオブジェクトを作成します

    ifstream ifs;

  3. ファイルを開き、ファイルが正常に開かれたかどうかを確認します

    ifs.open( "ファイルパス"、openメソッド);

  4. データを読む

    読む4つの方法

  5. ファイルを閉じる

    ifs.close();

例:

#include <fstream>
#include <string>
void test01()
{
	ifstream ifs;
	ifs.open("test.txt", ios::in);

	if (!ifs.is_open())
	{
		cout << "文件打开失败" << endl;
		return;
	}

	//第一种方式
	//char buf[1024] = { 0 };
	//while (ifs >> buf)
	//{
	//	cout << buf << endl;
	//}

	//第二种
	//char buf[1024] = { 0 };
	//while (ifs.getline(buf,sizeof(buf)))
	//{
	//	cout << buf << endl;
	//}

	//第三种
	//string buf;
	//while (getline(ifs, buf))
	//{
	//	cout << buf << endl;
	//}

	char c;
	while ((c = ifs.get()) != EOF)
	{
		cout << c;
	}

	ifs.close();


}

int main() {

	test01();

	system("pause");

	return 0;
}

総括する:

  • ファイルの読み取りには、ifstreamまたはfstreamクラスを使用できます
  • is_open関数を使用して、ファイルが正常に開かれたかどうかを判別します
  • ファイルを閉じる

5.2バイナリファイル

バイナリモードでのファイルの読み取りと書き込み

開封方法は次のように指定する必要があります ios :: binary

5.2.1ファイルの書き込み

ファイルを書き込むバイナリメソッドは、主にストリームオブジェクトを使用してメンバー関数writeを呼び出します。

関数プロトタイプ:ostream& write(const char * buffer,int len);

パラメーターの説明:文字ポインター・バッファーは、メモリー内の記憶域のセクションを指します。lenは、読み書きされたバイト数です。

例:

#include <fstream>
#include <string>

class Person
{
public:
	char m_Name[64];
	int m_Age;
};

//二进制文件  写文件
void test01()
{
	//1、包含头文件

	//2、创建输出流对象
	ofstream ofs("person.txt", ios::out | ios::binary);
	
	//3、打开文件
	//ofs.open("person.txt", ios::out | ios::binary);

	Person p = {"张三"  , 18};

	//4、写文件
	ofs.write((const char *)&p, sizeof(p));

	//5、关闭文件
	ofs.close();
}

int main() {

	test01();

	system("pause");

	return 0;
}

総括する:

  • ファイル出力ストリームオブジェクトは、書き込み関数を介してバイナリモードでデータを書き込むことができます

5.2.2ファイルの読み取り

ファイルを読み取るバイナリモードは、主にストリームオブジェクトを使用してメンバー関数readを呼び出します。

関数プロトタイプ:istream& read(char *buffer,int len);

パラメーターの説明:文字ポインター・バッファーは、メモリー内の記憶域のセクションを指します。lenは、読み書きされたバイト数です。

例:

#include <fstream>
#include <string>

class Person
{
public:
	char m_Name[64];
	int m_Age;
};

void test01()
{
	ifstream ifs("person.txt", ios::in | ios::binary);
	if (!ifs.is_open())
	{
		cout << "文件打开失败" << endl;
	}

	Person p;
	ifs.read((char *)&p, sizeof(p));

	cout << "姓名: " << p.m_Name << " 年龄: " << p.m_Age << endl;
}

int main() {

	test01();

	system("pause");

	return 0;
}
  • ファイル入力ストリームオブジェクトは、読み取り関数を介してバイナリモードでデータを読み取ることができます。

詳細については、公式アカウントに従ってください。
img

おすすめ

転載: blog.csdn.net/yegeli/article/details/113717515