Я пытаюсь создать псевдомессенджер. В моем мессенджере есть внутренний класс User. Когда регистрирую пользователя я записываю его как объект класса User в отдельный файл "RegisteredUsers.txt". Сделал я это для того чтобы - допустим если я записал этого пользователя в файл пусть будет имя - user1, номер телефона - 1234, я зарегистрирую другого пользователя например имя user2, номер 7890 - чтобы user2 мог нажать "Добавить контакт" и поискать по номеру кого-то (Метом добавлю потом) и допустим user2 нашел по номеру 1234 юзера1, и так user2 сможет написать юзеру1 сообщение. А если user2 ввел неправильный номер чтобы вылезала ошибка что "нет такого пользователя". Поэтому я и записываю в файл юзеров чтобы они могли найти друг друга. Но вот в чем беда - не получается чтение объекта из файла. Записать то могу, они записываются но вот чтение никак не получается.
Чтение я использовал для того чтобы проверить есть ли уже аккаунт с таким номером, если есть то по моей задумке должна выводиться ошибка.
Первый пользователь успешно записывается, а когда стараюсь зарегистрировать второго вылезает это ошибка именно в той проверке. Обращаю внимание- когда я записываю первого пользователя это ошибка не вылезает так как fstream (in) может открыть только существующий файл, f.is_open() дает false и проверка не срабатывает. Когда же я стараюсь зарегистрировать второго уже срабатывает проверка так как когда мы записывали первого fstream (out) создал файл.
Мой код#include <iostream>
using namespace std;
#include <fstream>
class Messenger
{
public:
void to_register(string newUserName, string newUserPhoneNumber)
{
/*path = "RegisteredUsers.txt";
f.open(path, fstream::in);
if (f.is_open())
{
User tempUser;
while (f.read((char*)&tempUser, sizeof(User)))
{
}
usersCount = tempUser.ID;
}
else
{
}
f.close();*/
path = "RegisteredUsers.txt";
f.open(path, fstream::in);
if (f.is_open())
{
User tempUser;
while (f.read((char*)&tempUser, sizeof(User)))
{
if (tempUser.phoneNumber == newUserPhoneNumber)
{
cout << "Error. User with this phone number already exists.";
return;
}
}
}
else
{
}
f.close();
User newUser(newUserName, newUserPhoneNumber);
path = "RegisteredUsers.txt";
f.open(path, fstream::out | fstream::app);
if (f.is_open())
{
f.write((char*)&newUser, sizeof(User));
}
else
{
}
f.close();
}
private:
class User
{
public:
User()
{
name = "";
phoneNumber = "";
}
User(string name, string phoneNumber)
: name(name), phoneNumber(phoneNumber)
{
}
string name;
string phoneNumber;
};
fstream f;
string path;
};
int main()
{
setlocale(LC_ALL, "ru");
Messenger Telegram;
Telegram.to_register("Aeris", "+994703228276");
return 0;
}