特別にフォーマットされた情報をバイナリファイルに書き込む方法をようやく理解しましたが、今の私の問題は、それを読み戻し、元の状態に戻すことです。
データを書き込むための私の関数は次のとおりです。
void save_disk(disk aDisk)
{
ofstream myfile("disk01", ios::out | ios::binary);
int32_t entries;
entries = (int32_t) aDisk.current_file.size();
char buffer[10];
sprintf(buffer, "%d",entries);
myfile.write(buffer, sizeof(int32_t));
std::for_each(aDisk.current_file.begin(), aDisk.current_file.end(), [&] (const file_node& aFile)
{
myfile.write(aFile.name, MAX_FILE_NAME);
myfile.write(aFile.data, BLOCK_SIZE - MAX_FILE_NAME);
});
}
そして、それが最初に作成された私の構造と、それをロードし直したいものは、次のように構成されています。
struct file_node
{
char name[MAX_FILE_NAME];
char data[BLOCK_SIZE - MAX_FILE_NAME];
file_node(){};
};
struct disk
{
vector<file_node> current_file;
};
同じように配置されるように読み戻す方法はよくわかりませんが、とにかく哀れな試みがあります(保存のために行ったことを逆にしようとしました):
void load_disk(disk aDisk)
{
ifstream myFile("disk01", ios::in | ios::binary);
char buffer[10];
myFile.read(buffer, sizeof(int32_t));
std::for_each(aDisk.current_file.begin(), aDisk.current_file.end(), [&] (file_node& aFile)
{
myFile.read(aFile.name, MAX_FILE_NAME);
myFile.read(aFile.data, BLOCK_SIZE - MAX_FILE_NAME);
});
}
^^これは絶対に間違っています。^^
私はifstreamの基本的な操作を理解していますが、実際にそれを使用する方法を知っているのは、テキストのファイルで読み取られます。それよりも複雑なことは、私が少し迷っています。
これをどのように読むことができるかについての提案はありますか?