2016-09-29 4 views
0

私のコードのどこが間違っているのか混乱しています。 1,2,3になるのではなく、1,1,1です。私が何をすることができるかについての提案はありますか?私は、私のエラーがデータの書き込みにあるか、変数値を使用しているかを推測しています。バイナリファイルの追加と読み取り

class Binary 
{ 
public: 
    Binary(int num); 
    ~Binary(); 

    void createBinary(); 
    void writeBinary(); 
    void readBinary(); 

    string binFile; 
    int value; 
    fstream binaryFile; 
}; 

Binary::Binary(int num) 
{ 
value = num; 
binFile = "BinaryFile.bin"; 
} 

Binary::~Binary() 
{ 
} 

void Binary::createBinary() 
{ 
    binaryFile.open(binFile, ios::out | ios::binary); 
    binaryFile.close(); 
} 

void Binary::writeBinary() 
{ 
    if (!binaryFile) //if file does not exist 
    { 
    createBinary(); 
    } 

    binaryFile.open(binFile, ios::app | ios::binary); 
    binaryFile.write((char*)&value, sizeof(value)); 
    binaryFile.close(); 
} 

void Binary::readBinary() 
{ 

    binaryFile.open(binFile, ios::in |ios::binary); 
    binaryFile.read((char*)&value, sizeof(value)); 
    binaryFile.close(); 

    cout << value << ", "; 
} 



int main() 
{ 
    Binary num1(1); 
    Binary num2(2); 
    Binary num3(3); 

    num1.writeBinary(); 
    num2.writeBinary(); 
    num3.writeBinary(); 

    num1.readBinary(); 
    num2.readBinary(); 
    num3.readBinary(); 


    return 0; 
} 
+1

ポップクイズ:ファイルのどの部分が 'readBinary()'と呼ばれる3回のそれぞれを読みますか?あなたの複数の選択肢の答えは次のとおりです:1.何とか 'readBinary()'に前回呼び出されたファイルのどの部分が読み込まれたかを魔法のように知っていて、ファイルの次の部分にスキップします。答えは30秒です。時計は今や刻々と始まります。 –

+0

もっとシンプルにするには:ファイルを一度開いてから繰り返し読み込み、閉じます。 – Barmar

+0

ファイルの先頭にある – zzQwerty

答えて

0

1つのファイルを使用し、各Binary():: readBinary()でstartから読み込むので、結果は期待通りです。それぞれのオブジェクトに異なるファイルを使用してください。

// In general we may need some random part in name but for this special case, 
// since you are just writing/reading value, the following seems to work. 

Binary::Binary(int num) 
{ 
    value = num; 
    binFile = "BinaryFile"; // common start 
    binFile += std::to_string(value); // differentiator 
    binFile += ".bin"; // extension 
} 

同じファイルを使用する場合は、同じ行を何度も読み取らないように静的変数から助けを求めてください。

関連する問題