Двоичные файлы со структурой, классами, ошибкой fstream

0

У меня есть вопрос относительно назначения, которое у меня есть.

здесь у меня есть 2 класса, класс сотрудников и класс gm

void GM::addEmployee(fstream& afile, int noOfRecords)
{
    afile.open("EmployeeInfo.dat", ios::in | ios::binary);   
        employee::eInfo e;
        employee emp;
    char name[80];
    cout << "\nAdd Employee Info" << endl;
    cout << "---------------------" << endl;
    cout << "New Employee Username: ";
        cin.clear();
        cin.ignore(100, '\n');
    cin.getline(name, 80);
        //Check if there is already an entry inside the file with this name.
        //If yes, add fail
    bool flag = true;
    if(noOfRecords > 0)
    {
        for(int i=1; i<=noOfRecords; i++)
        {   
            afile.read (reinterpret_cast <char *>(&e), sizeof(e));
            if(!strcmp(name, e.username))
            {
                cout << "Username is used, add GM failed" << endl;
                flag = false;
            }
        }

    } 
    afile.close();

        if(flag)
        {
             //open in appending mode
             afile.open("EmployeeInfo.dat", ios::out | ios::app | ios::binary);
             strcpy(e.username, name);
             cout << "Please Enter New Employee Password: ";
             cin.getline(e.password, 80);
             cout << "\nPlease Enter New Employee Appointment "
                  << "\n(0 = GM / 1 = HM / "
                  << "2= BS / 3 = FOS)\n : ";
             cin >> e.eid;
             cin.clear();
             cin.ignore(100, '\n');
             emp.dist = strlen(e.password);
             emp.caesar_encrypt(e.password, 3, emp.dist);
             afile.write(reinterpret_cast <const char *>(&e), sizeof(e));
         afile.close();

             cout << "\nEmployee Added" << endl;
        }

}

Вышеупомянутая функция является функцией моего класса GM, который заключается в том, чтобы добавлять сотрудников.

Я объявил структуру в классе сотрудника как

struct eInfo
{
    char username [80];
    char password [80];
    int eid;
}; 

Проблема с этим способом заключается в том, что когда я пытаюсь добавить сотрудника, мои данные EmployeeInfo.dat исчезают. все становится пустым после того, как я использовал функцию add employee.

может ли кто-нибудь направить меня на то, что я сделал неправильно?

Теги:
class
struct
function
fstream

1 ответ

0

Это неверный способ чтения данных в e:

afile.read(reinterpret_cast<char*>(&e), sizeof(e));

Аналогичным образом, это неправильный способ записи данных из e:

afile.write(reinterpret_cast<const char*>(&e), sizeof(e));

Если вам нужно распечатать или прочитать данные e, вам нужно сделать это по одному. Более того, использование read/write в этом контексте не обязательно, потому что вы просто используете экстрактор и вставку:

afile >> e.username;
// ...
afile << e.username << e.password;
  • 0
    Я не очень хорошо знаю C, но нужно ли передавать объект afile этой функции?
  • 0
    @ bf2020 Нужно ли передавать afile на какую функцию? Извините, я, кажется, не понимаю ... Кстати, это C ++ .
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню