記事のディレクトリ
5ファイル操作
プログラムの実行時に生成されるデータは一時的なデータであり、プログラムが終了すると解放されます。
データはファイルを介して永続化できます
C ++でのファイル操作には、ヘッダーファイルを含める必要があります <fstream>
ファイルには次の2つのタイプがあります。
- テキストファイル-ファイルはテキストASCIIコードの形式でコンピュータに保存されます
- バイナリファイル-ファイルはテキストのバイナリ形式でコンピュータに保存され、ユーザーは通常それらを直接読み取ることはできません
操作ファイルには、主に3つのカテゴリがあります。
- ofstream:書き込み操作
- ifstream:読み取り操作
- fstream:読み取りおよび書き込み操作
5.1テキストファイル
5.1.1ファイルの書き込み
ファイルを書き込む手順は次のとおりです。
-
ヘッダーファイルをインクルードする
#include <fstream>
-
ストリームオブジェクトを作成します
ofstream ofs;
-
ファイルを開く
ofs.open( "ファイルパス"、openメソッド);
-
データを書き込む
ofs << "書き込まれたデータ";
-
ファイルを閉じる
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ファイルの読み取り
ファイルの読み取りはファイルの書き込みに似ていますが、読み取る方法は他にもあります
ファイルを読み取る手順は次のとおりです。
-
ヘッダーファイルをインクルードする
#include <fstream>
-
ストリームオブジェクトを作成します
ifstream ifs;
-
ファイルを開き、ファイルが正常に開かれたかどうかを確認します
ifs.open( "ファイルパス"、openメソッド);
-
データを読む
読む4つの方法
-
ファイルを閉じる
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;
}
- ファイル入力ストリームオブジェクトは、読み取り関数を介してバイナリモードでデータを読み取ることができます。
詳細については、公式アカウントに従ってください。