Невозможно усечь файл, чтобы сжать его c ++ - PullRequest
1 голос
/ 06 апреля 2019

Я пытаюсь сжать файл с удаленными записями, я намереваюсь сохранить файл во временном массиве символов, затем открыть новый файл или обрезать существующий, чтобы записать временный массив символов без удаленных записей, это код

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 без удаленной записи?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...