Всем привет.
Есть такой код:
// Объявляю структуру
struct Settings {
int year;
char name[52];
};
..
long int filesize = 92672; // Приходиться контролировать размер файла =(
Settings s;
int fize = MAX_PATH;
char *filename = new char[size];
GetModuleFileNameA(NULL, filename, size); // Получаю путь к себе
ifstream file(filename, ios::binary);
file.seekg(filesize); // Ставлю указатель на конец файла
file.read((char*)&data, sizeof(Settings)); // Читаю внедрённую структуру
file.close(); // Закрываю
Это сам бинарный файл.
А вот файл, который внедряет структуру:
// Объявляю структуру
struct Settings {
int year;
char name[52];
}
..
// Инициализирую переменные
Settings s;
s.year = 12;
strcpy(s.name, "Alesha");
// Внедряю
ifstream binaryfile("person.exe", ios::binary);
ofstream injected("person created.exe", ios::binary);
injected << binaryfile.stdbuf();
binaryfile.close();
injected.write((char*)&s, sizeof(Settings));
injected.close();
Но в этом методе есть минусы:
1. Приходиться вводить размер файла в байтах, а если ввести большие данные - размер файла станет больше введённого и будет выводиться мусор.
2. Не рабочий. Почему-то если я добавляю новых переменных. Например "char car[52];" и т.п, то выводиться либо пустые строки, либо мусор в виде *!@(EU.
Что делать? Есть какой то "кроссплатформенный" способ? Нужно перенести данные в бинарный файл как-то.