Я пытаюсь получить доступ к файлу .txt в режиме чтения и записи, а затем перезаписать определенную часть текста.
В файле .txt хранится список пользователей, каждый из которых определен как таковой:
UserType:FirstName:LastName:Email:Password:endl:
Задача метода, отвечающего за внесение изменений, состоит в том, чтобы проанализировать файл и изменить лагерь электронной почты.
Он требует ввода объекта User и нового адреса электронной почты, который должен быть зарегистрирован.
void userContainer::modifyEmail(User & u, string newmail){
fstream user_file;
string temp;
user_file.open("users.txt");
while(!(user_file.eof())){
getline(user_file,temp,':');
if(temp==u.getEmail()){
//save position of the email string
long pos=user_file.tellg();
//copy user data following the email
string remaining_data;
getline(user_file,remaining_data,'\n');
//overwrite with newmail
user_file.seekp(pos-(temp.size()+1));//positioning the pos value at the beginning of the email camp
user_file.write(&newmail[0],newmail.size()); //overwriting with the new mail
//writing remaining data;
user_file.write(&remaining_data[0], remaining_data.size());
}
}
user_file.close();
}
После запуска метода без изменений не применяется к файлу users.txt.Строка «Остальные_данные», однако, правильно регистрирует строки, следующие за лагерем электронной почты.
Удаление части кода, использующей строку оставшиеся_данные, изменяет файл, но, очевидно, не так, как я хочу:
void userContainer::modifyEmail(User & u, string newmail){
fstream user_file;
string temp;
user_file.open("users.txt");
while(!(user_file.eof())){
getline(user_file,temp,':');
if(temp==u.getEmail()){
//save position of the email string
long pos=user_file.tellg();
//overwrite with newmail
user_file.seekp(pos-(temp.size()+1));
user_file.write(&newmail[0],newmail.size());
}
}
user_file.close();
}
Пример:
Перед вызовом modifyEmail:
admin:Cristiano:Ronaldo:cr7@fluffymail.com:cri7madr1d:endl:
После вызова modifyEmail (без использования оставшихся_данных)
admin:Cristiano:Ronaldo:banana100000@hotmail.itmadr1d:endl:
Требуемое поведение послевызов метода
admin:Cristiano:Ronaldo:banana100000@hotmail:cri7madr1d:endl: