#include #include struct Player { int id = 0; char* name; int rank; }; void writePlayersFile(Player* playersArr, int playersSize, int append = 0) { std::ofstream outf; outf.open("file.dat", std::ios::binary | append ? std::ios::app : 0); for (int i = 0; i < playersSize; i++) { outf.write((char*)& playersArr[i].id, sizeof(int)); size_t nameLen = strlen(playersArr[i].name) + 1; outf.write(playersArr[i].name, nameLen); if (nameLen < 50) { outf.seekp(50 - nameLen, std::ios::cur); }; outf.write((char*)& playersArr[i].rank, sizeof(int)); } outf.close(); } void readPlayersFile(Player* playersArr, int playersSize) { std::ifstream inf; inf.open("file.dat", std::ios::binary); char buf[100]; for (int i = 0; i < playersSize; i++) { inf.read((char*)& playersArr[i].id, sizeof(int)); for (int i = 0; inf.read(buf + i, 1), buf[i] and i < 100; i++); int nameLen = strlen(buf) + 1; playersArr[i].name = new char[nameLen]; strcpy(playersArr[i].name, buf); if (nameLen < 50) { inf.seekg(50 - nameLen, std::ios::cur); }; inf.read((char*)& playersArr[i].rank, sizeof(int)); } inf.close(); } int changePlayersFileById(int searchId, const char* name) { std::fstream file; file.open("file.dat", std::ios::in | std::ios::out | std::ios::binary); int id = 0; int nameLen = 0; for (int i = 0; i < 3; i++) { file.read((char*)&id, sizeof(id)); if (id == searchId) { nameLen = strlen(name) + 1; file.seekp((int)file.tellg(), std::ios::beg); file.write(name, nameLen); file.close(); return 0; } file.seekg(50 + 4, std::ios::cur); } file.close(); return 1; } void printPlayersArr(Player* playersArr, int playersSize) { for (int i = 0; i < playersSize; i++) { std::cout << playersArr[i].id << ' ' << playersArr[i].name << ' ' << playersArr[i].rank << '\n'; } } int main() { Player players[3]{ {2607, new char[sizeof("MadMax")]{"MadMax"}, 39},{2802, new char[sizeof("Batman")]{"Batman"}, 25},{2902, new char[sizeof("Joker")]{"Joker"}, 15} }; writePlayersFile(players, 3); for (int i = 0; i < 3; i++) { delete[] players[i].name; }; Player readPlayers[3]{}; readPlayersFile(readPlayers, 3); printPlayersArr(readPlayers, 3); for (int i = 0; i < 3; i++) { delete[] readPlayers[i].name; }; changePlayersFileById(2802, "BATMAN FOREVER YOUNG!"); changePlayersFileById(2902, "Joker Rockker :]"); readPlayersFile(readPlayers, 3); printPlayersArr(readPlayers, 3); for (int i = 0; i < 3; i++) { delete[] readPlayers[i].name; }; }