Я пытаюсь написать двоичный файл, вот мой фрагмент кодаотладки строки чтения/записи в двоичный файл
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
struct user
{
string ID;
string password;
};
int main()
{
fstream afile;
afile.open("user.dat",ios::out|ios::binary);
user person;
person.ID ="001";
person.password ="abc";
afile.write (reinterpret_cast <const char *>(&person), sizeof (person));
person.ID ="002";
person.password ="def";
afile.write (reinterpret_cast <const char *>(&person), sizeof (person));
afile.close();
afile.open("user.dat",ios::in|ios::binary);
while (afile.read (reinterpret_cast <char *>(&person), sizeof (person)))
{
cout<<person.ID
<<" "
<<person.password
<<endl;
}
}
Я ожидаю мой консольный вывод, чтобы быть
001 abc
002 def
Вместо я получаю
002 def
002 def
Может кто-нибудь мне объяснить?
это всегда хорошая идея, чтобы закрыть файл после того, как вы сделали с ним, как и во второй раз вы откройте 'afile'. –
@JonnyHenly, деструктор закрывает его. – chris
Это не сработает. Строка 'std :: string' не является обычным старым объектом данных, и вы не можете сбрасывать их в/из файла таким образом. Вместо этого просмотрите __serialization__. – Blastfurnace