我希望能够将类型为Music的链接列表写入二进制文件,然后再将其读回链接列表。当然,我遇到问题了。据我所知,我的问题是字符串是一个可变长度。由于字符串并不总是相同的大小,所以在阅读时不知道要阅读多少。我打算将我的课程转换为固定长度的cstrings来解决问题。其实,我试过,但还有其他一些问题是由此造成的。我的问题是,有没有办法在不大幅改变我的代码的情况下达到我想要的效果?将二进制文件读入类对象
void ReadBinFile(Node * head, string filename)
{
Music new_song;
ifstream bin(filename, ios::in | ios::binary);
if (bin.is_open())
{
while (!bin.eof())
{
bin.read(reinterpret_cast<char *>(&new_song), sizeof(Music));
if (!bin.eof())
{
Node * new_node = CreateNode(new_song);
AppendNode(head, new_node);
}
}
bin.close();
}
}
void Save(Node * head, string filename)
{
ofstream bin(filename, ios::out | ios::binary);
if (bin.is_open())
{
Node * traveler = head;
while (traveler != nullptr)
{
bin.write(reinterpret_cast<char *>(&(traveler->song)), sizeof(Music));
traveler = traveler->next;
}
bin.close();
}
}
Node * CreateNode(Music song)
{
Node * new_node = new Node;
new_node->song = song;
new_node->next = nullptr;
return new_node;
}
//music.h
class Music
{
public:
Music(string name = "", string artist = "");
private:
string m_name;
string m_artist;
};
小心添加有关二进制文件格式如何的信息? –
@CyberSpock我会,但我不完全知道格式是什么。我对二进制文件了解不多。我可以复制+粘贴一个生成的例子,如果这会有所帮助。 –
你需要先弄清楚格式,然后创建pack/unpack函数来读/写一条记录。 –