C++ создание копии двоичного файла чтение, запись
Привет сообщество, я пытаюсь прочитать исполняемый файл в массив Char, а затем создать исполняемый файл с этим массивом. Мой код ниже действительно читает и записывает, но выходной файл составляет всего 4 байта. Так что же мне следует изменить?
ifstream in("F:\\helloworld.exe"); size_t len = in.tellg(); char *oData = new char[len + 1]; in.seekg(0, ios::beg); in.read(oData, len); oData[len] = '\0'; printf("%d", sizeof(oData)); ofstream out("F:\\helloworld2.exe"); out.write((char *)oData, sizeof(oData)); out.close(); delete[] oData;
MODIFIED:
Теперь я изменил код следующим образом, и файл создается с тем же количеством байтов, что и оригинал. Я удалил символ '\0', так как он кажется ненужным. Теперь, когда я запускаю клон, он показывает "программа слишком велика, чтобы поместиться в памяти", и почему? Надеюсь, я не собираюсь полностью оторвать себе ноги.
ifstream in(path); in.seekg(0, ios::end); size_t len = in.tellg(); unsigned char *oData = new unsigned char[len]; in.read((char*)(&oData[0]), len); in.close(); size_t counted = in.gcount(); cout << counted << endl; //result always 0 ??? printf("\n %d", len); //same amount as original file length ofstream out(newP); //myFile.open(newP, ios::out | ios::binary | ios::ate); out.write((char *)oData, len); out.close(); delete[] oData;
И почему fread и fwrite не позволяют мне назначить
unsigned char
параметр?Что я уже пробовал:
И вопрос, и "что вы пробовали" должны быть не менее 30 символов.