Tenho um programa onde um usuário pode escrever (anexar) em um arquivo de texto escolhido para armazenar informações. Cada linha deve ter dois números e uma sequência de data (AAAA-MM-DD). Existem vários arquivos de texto diferentes nos quais o programa pode escrever, digamos "foo.txt", "bar.txt", "stroustrup.txt", e o conteúdo do arquivo pode ser parecido com este:
-18 30 2025-02-12
0 0 2025-02-01
-23 36 2025-02-27
Agora eu gostaria de adicionar uma espécie de função "desfazer", que exclui a última linha de um arquivo de texto escolhido, caso o usuário insira algo errado, por exemplo undo(const string& filename)
.
Eu sei que uma possibilidade é usar getline(file,string) continuamente, até chegar ao fim do arquivo, e escrever tudo, exceto a última entrada, em um novo arquivo, criando assim uma cópia com a linha final omitida. No entanto, sinto que deveria haver uma maneira melhor de fazer isso. Como 1. Eu teria que criar um novo arquivo, com um novo nome, para cada chamada do meu undo. E reescrever um arquivo inteiro apenas para me livrar de uma linha - uma que está sempre no final - parece um desperdício.
Usar funções seek() também é inapropriado, já que o objetivo é excluir entradas errôneas. Não posso pesquisar razoavelmente por uma string específica (já que o usuário pode inserir qualquer string boba no arquivo .txt antes de tentar desfazer).
Existe uma maneira organizada de fazer isso, ou seja, substituir a linha final por um espaço vazio ou "\n", sem precisar copiar e reescrever todo o outro conteúdo?