PDA

Visualizza la versione completa : [C++] Scrivere file in append senza rimpiazzare


siciliano87
10-11-2011, 13:19
Salve a tutti,
vorrei scrivere del testo su file già esistente, non in fondo al file, ma potendo scegliere la posizione all'interno del file (usando la funzione seek di fstream) e inserire nuove informazioni. A questo punto mi direte è semplice! Non proprio. Se mi sposto con seek e scrivo, rimpiazzo il contenuto successivo a quella posizione e non voglio che ciò accada.

Come faccio? :dhò:
Grazie a tutti per le risposte!

oregon
10-11-2011, 13:40
E quali risposte dare se non mostri il codice?

siciliano87
10-11-2011, 13:57
#include <fstream>
using namespace std;

int main () {
long pos;

ofstream outfile;
outfile.open ("test.txt");

outfile.write ("This is an apple",16);
pos=outfile.tellp();
outfile.seekp (pos-7);
outfile.write (" sam",4);

outfile.close();

return 0;
}


Questo è l'esempio del codice che crea il file e ci scrive "This is an apple" e dopo la modifica "This is a sample". Se sposto il puntatore dello stream del file indietro di 7 dalla fine (ovviamente usando tellp per recuperare l'indirizzo della posizione della fine e sottraendovi 7 per tornare indietro con seekp), quello che scrivo andrà a rimpiazzare "n ap" con " sam". Se io volessi invece NON rimpiazzare ma aggiungere codice facendolo diventare "This is a samn apple" che modifiche apportare al codice?

oregon
10-11-2011, 14:05
Questa è un'altra storia. Non puoi aggiungere dati nel mezzo di un file senza riscrivere tutta la parte del file che segue. Cioè se nel file hai

parola1 parola2

e vuoi farlo diventare

parola1 parola3 parola2

la seek non ti serve a nulla.

Dovrai creare un altro file in cui scriverai la prima parte del primo file

parola1

i nuovi dati

parola3

e la parte finale del primo file

parola2

Alla fine cancellerai il primo file e rinominerai il secondo.

Loading