2011-12-03 6 views
0

私はこのコードをC++で.datファイルを作成するために使いました。C++でのファイル処理..どのように動作しますか?

これらの2行はわかりませんでした。これらはどのように機能しますか?

outfile.write(reinterpret_cast<char*>(&pers), sizeof(pers)); 

ofstream outfile("PERSON.DAT",ios::app| ios::binary); 
#include <fstream> //for file streams 
#include <iostream> 

using namespace std; 

class person //class of persons  
{ 
protected: 
    char name[80]; //person’s name 
    short age; //person’s age 
public: 
    void getData() //get person’s data 
    { 
     cout <<"Enter name: "; cin >> name; 
     cout <<"Enter age: "; cin >> age; 
    } 
}; 

int main() 
{ 
    char ch; 
    person pers; //create a person 
    ofstream outfile("PERSON.DAT",ios::app| ios::binary); 
    do { 
     pers.getData(); //get data for person 
     outfile.write(reinterpret_cast<char*>(&pers), sizeof(pers)); 
     cout <<"Enter another person (y/n)? "; 
     cin >> ch; 
    } while (ch == 'y'); 

    //create ofstream object 
    //write to it 
    return 0;  
} 
+0

「どのように機能しますか?」ひどく。シリアル化ライブラリを使用して物をシリアル化し、オブジェクトをバイトのパックとして扱わないでください。 –

+0

構造体の整列は実装定義であるため、reinterpret_castを直列化に使用することは移植可能に動作することが保証されていません。 – moshbear

+0

私はそれが何を意味するのかということでしたか? – zedai

答えて

3
ofstream outfile("PERSON.DAT",ios::app| ios::binary); 

この2行目から、出力ファイルストリームが作成され、2つのモードの組み合わせを使用して「PERSON.DAT」というファイルが開きます。追加とバイナリ。つまり、出力ストリームに送信されたデータはファイル内の既存のデータに追加され、ファイルを上書きするのではなくファイルに効果的に追加されます。バイナリモードは、ファイルに書き込まれたすべてのデータがそのまま解釈されるように指定します。 Windowsでは、テキストモードと呼ばれるモードがあります。このモードでは、 '\ n'などの特定の文字がWindowsの同等の文字に変換されます。バイナリモードは標準モードです。出力ストリームに送信するものは何も変更せずに書き込むことを意味します。

outfile.write(reinterpret_cast<char*>(&pers), sizeof(pers)); 

このコマンドは、出力ファイルにPERSオブジェクトを書き込みます。 write()メソッドには2つのパラメータが必要です。最初はファイルに書き込まれる一連のバイトへのポインタであり、2番目は書き込まれる系列からのバイト数を示す整数です。 reinterpret_cast()関数は、人物オブジェクトへのポインタを人*からchar *にキャストします。これはwriteメソッドで必要なパラメータの型です。 sizeof()は、前述したように、のwrite()でも必要なオブジェクトのサイズをバイト単位で取得する関数です。

+0

ありがとう:) – zedai

0

彼らはただ、オブジェクトがメモリ内に始まるから始まり、それがchar秒のちょうど束であるかのように、オブジェクトのサイズのために行くバイトでメモリ内構造のバイトを書き込みます。

これは今まで最も素晴らしいアイデアではなく、著者は予期しない合併症にある時点で対応する可能性があります。

関連する問題