1

ゲームのキャラクターをバイナリ ファイルに書き込んでゲームを保存しようとしています。残念ながら、私のバイナリ ファイルはテキスト ファイルのようにファイルに書き込んでいます。

文字列をインスタンス化し、その文字列に対して保存関数を呼び出すと、バイナリ ファイルに完全に書き込まれます。ただし、CharacterSave 関数から同じ関数を呼び出すと、ファイルがバイナリ ファイルではなくテキスト ファイルとして表示されます。

呼び出し階層は次のようになります

  1. Character.Save() は文字列 save を呼び出し、バイナリ ファイルに書き込みます。

  2. Character.Save() は、バイナリ ファイルに書き込むポーチ (コインポーチ) の保存を呼び出します。

  3. Character.Save() は財布 (つまりバックパック) の save を呼び出します。これは動的配列の save を呼び出します。これは要素数をバイナリ ファイルに書き込み、ポーションの save メソッドを呼び出します。これは文字列の save メソッドを呼び出します。

編集:問題を解決しました。方法はわかりませんが、別の .dat ファイルを作成するだけで解決しました。

関数を保存するための呼び出し

//Create instance of binary file object
std::ofstream file("game.dat", std::ios::out | std::ios::binary);

//Check if file is open
if(file.is_open())
{
    //Save character
    myFavoriteCharacter.Save(file);

    //Close the file
    file.close();
}
else
    std::cout << "\nFile did not open! " << std::endl;

キャラクターセーブ機能

void Character::Save(std::ofstream & file)
{
    mName.Save(file);
    mPouch.Save(file);
    mPurse.Save(file);
}

文字列保存機能

void String::Save(std::ofstream & file)
{
    int tempLength = 0;
    tempLength = this->getLength();

    //Write the length of the string
    file.write(reinterpret_cast<char *>(&tempLength), sizeof(int));

    //Write the string
    file.write(reinterpret_cast<char *>(this->mStr), tempLength + 1);
}

CoinPouch(つまりポーチ)保存機能

void CoinPouch::Save(std::ofstream & file)
{
    file.write(reinterpret_cast<char *>(&mPlatinum), sizeof(int));
    file.write(reinterpret_cast<char *>(&mGold), sizeof(int));
    file.write(reinterpret_cast<char *>(&mSilver), sizeof(int));
    file.write(reinterpret_cast<char *>(&mCopper), sizeof(int));
}

DynamicArray 保存関数

void DynamicArray::Save(std::ofstream & file)
{
    //Write the number of elements
    file.write(reinterpret_cast <char *>(&mElements), sizeof(int));

    //Save each element
    for(int i = 0; i < mElements; i++)
        mArray[i].Save(file);
}

ポーションセーブ機能

void Potion::Save(std::ofstream & file)
{
    mName.Save(file);
    mDescription.Save(file);
    mPotency.Save(file);
    mCost.Save(file);
}
4

1 に答える 1

1

Visual Studio 2012 に「game2.dat」という名前の新しいファイルを開くように強制すると、機能しました。通常のテキスト ファイルではなく、バイナリ ファイルの 16 進ダンプが表示されます。とても奇妙で、これがなぜなのかよくわかりませんが、そうでした。

読んでくれた/返信してくれた人に感謝します。

于 2013-04-27T23:21:40.817 に答える