C++ exe içinde veri saklama ve değiştirme

Başlatan sovalye, 09 Ekim 2015, 17:24:13

sovalye

@vitruvius un https://www.picproje.org/index.php/topic,61423.0.html konusunu görünce aklıma veriyi başka dosya tutmadan exe 'nin içine gömüp daha sonra orada değiştirmek geldi. Sonuç bunu yazdım. Buraya atıyorum. Bir kere derleyince daha sonraki seferlerde exe'den açarsanız çalışıyor.
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
#include <Windows.h>
using namespace std;
int main() {
	vector<int>::iterator it;
	ifstream input("C:\\Users\\bla\\Documents\\visual studio 2015\\Projects\\Project2\\Debug\\Project2.exe", std::ios::binary);
	string yeni;
	vector <int> dizi;
	char f[99] = "hehehe07SOVALYEiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii";
	int key[] = { 104,101,104,101,104,101 }; // hehehe Ascii
	int temp = 0,j=0,boyut=0,k;
	do {
		temp = input.get();
		dizi.push_back(temp);
	} while (temp >= 0);
	input.close();
	
	it= search(dizi.begin(), dizi.end(), key,key+5);
	cout << "mevcut kelime= ";
	boyut = (*(it + 6) - 48) * 10 + *(it + 7)-48;
	for (int i = 0; i < boyut; i++) {
		cout << (char)*(it+ 8 + i);
	}
	cout << endl << "yeni kelime= ";
	cin >> yeni;
	k = yeni.size();
	*(it + 6) = k / 10 + 48;
	*(it + 7) = k % 10 + 48;
	for (int p = 0; p < yeni.size(); p++) {
		*(it+8 + p) = yeni[p];
	}

	ofstream bas("C:\\Users\\bla\\Documents\\visual studio 2015\\Projects\\Project2\\Debug\\Project2.txt", std::ios::binary | std::ofstream::trunc);
	for (int y = 0; y < dizi.size(); y++) {
		bas.put(dizi[y]);
	}
	bas.close();

	ofstream batch;
	batch.open("C:\\Users\\bla\\Documents\\visual studio 2015\\Projects\\Project2\\Debug\\eraser.bat");
	batch<< ":dene\n"
		"del \"C:\\Users\\bla\\Documents\\visual studio 2015\\Projects\\Project2\\Debug\\Project2.exe\"\n"
		"if exist \"C:\\Users\\bla\\Documents\\visual studio 2015\\Projects\\Project2\\Debug\\Project2.exe\" goto dene\n"
		"ren \"C:\\Users\\bla\\Documents\\visual studio 2015\\Projects\\Project2\\Debug\\Project2.txt\" Project2.exe\n"
		"del \"C:\\Users\\bla\\Documents\\visual studio 2015\\Projects\\Project2\\Debug\\eraser.bat\"\n";
	batch.close();

	STARTUPINFO qw;
	PROCESS_INFORMATION er;
	ZeroMemory(&qw, sizeof(qw));
	qw.cb = sizeof(qw);
	ZeroMemory(&er, sizeof(er));

	CreateProcess(
			TEXT("C:\\Users\\bla\\Documents\\visual studio 2015\\Projects\\Project2\\Debug\\eraser.bat"),
			NULL, NULL, NULL, FALSE,
			CREATE_NO_WINDOW,
			NULL, NULL, &qw, &er
		);

	return 0;
}