Я пытаюсь сжать файл с удаленными записями, я намереваюсь сохранить файл во временном массиве символов, затем открыть новый файл или обрезать существующий, чтобы записать временный массив символов без удаленных записей, это код
void compact(fstream &file)
{
header = -1;
file.seekg(0, ios::end);
int fileSize = file.tellg();
file.seekg(2, ios::beg); ///Why seek from 0 not working, it's must to seek from 2
char temp[fileSize]; ///Is it better to declare this char dynamically ?
file.read(temp, fileSize);
cout << "temp size = " << strlen(temp) << endl;
cout << "filesize = "<< fileSize << endl;
cout << temp << endl;
file.close();
fstream outfile("newfile.txt", ios::in | ios::out | ios::trunc | ios::binary);
outfile.seekp(0, ios::beg);
outfile.write((char*)& header, sizeof(header));
for(int i = 0 ; i<strlen(temp) ; i++)
{
if(temp[i] == '*')
{
i+=recordSize -1 ;
}
else
file.write((char*)&temp[i], 1);
}
}
не работает ни открытие нового файла, ни открытие существующего, я думаю, что эта строка вызывает проблему fstream outfile("newfile.txt", ios::in | ios::out | ios::trunc | ios::binary);
она вызывает очень странную логику для меня;Я печатаю темп после загрузки файла в него, и он печатается нормально, как только он достигает упомянутой строки, она меняет темп!, Я пытаюсь прокомментировать эту строку, после чего темп снова печатается нормально.Просто как я могу открыть новый файл или обрезать существующий файл, чтобы сохранить в нем temp без удаленной записи?