バイナリファイルの読み書き

1921 ワード

C++はテキストタイプのファイルを読み書きすることができ、同じくバイナリタイプのファイルを読み書きすることができ、格納された内容は直接ダブルクリックで開くことはできないかもしれないが、バイナリ方式で読み取ることで正常な展示を行うことができる.
#include 
#include 

まずヘッダファイルを導入
次に、データを追加し、ファイルにバイナリで追加するクラスを作成します.
//        
class Person
{
public:
	char m_Name[50];//  
	int m_Age; //  
};

注意:タイプはstringを使用しないでください.stringオブジェクトにはポインタが含まれています.プログラム構築チェーンテーブルを開くたびにバイナリファイルから前回保存した情報が読み込まれます.このポインタも読み込まれますが、このポインタは失効しています.このポインタが指すアドレスは今回の運転時に申請されていません.そのため、オブジェクトを解析するときに、その指向するアドレスを解放するのは違法です.
次に、オブジェクトをバイナリとして保存するファイルです.
//     
//     
ofstream ofs("person.txt", ios::out | ios::binary); //                          ,      
//    
//ofs.open("test.txt", ios::out | ios::binary);
//   
Person p = { "  " , 18 };
ofs.write((const char*)&p, sizeof(Person));
//   
ofs.close();

パラメータは前の文章にすでに書いたが、ここでは余計なことは言わない.入力パラメータは1つのオブジェクトであるため、読むときにもオブジェクトで読み取ることができ、このファイルを直接開くと文字化けしか見えなくなる.
                                                    

直接開くのは文字化けしですが、このファイルをバイナリで読み取り、オブジェクトで受信します.パラメータタイプはcharポインタでなければなりませんので、強く回転する必要がありますが、オブジェクトはポインタタイプに強く回転できません.そのため、強く回転するのはオブジェクトの参照で、依然としてよく使用できます.
	//     
	ifstream ifs("person.txt", ios::in | ios::binary);
	//    
	//ifs.open("person.txt", ios::in | ios::binary);
	//           
	if (!ifs.is_open())
	{
		cout << "      " << endl;
		return;
	}
	//    
	Person p2;
	ifs.read((char*)&p2, sizeof(Person));
	cout << "p2    : " << p2.m_Name << "
p2 : " << p2.m_Age << endl; // ifs.close();

以下の効果で
p2    :   
p2    : 18

E:\C Cpp   \C++  \Debug\  -   -  .exe (   12700)   ,    0。
              ,   “  ”->“  ”->“  ”->“            ”。
         . . .